感谢您抽出宝贵时间来审核我的问题!
让我们假设有一个Web服务(restful,SOAP,XML / JSON,你想要的东西),这是一个关于小狗的服务。出于这个问题的目的,小狗可以有两个成员变量。第一个是小狗的唯一ID。另一个数据成员是“跳蚤数量”(Flea Count)。
小狗服务提供的功能之一可能是“根据小狗的ID返回代表小狗的物体。”
您如何处理客户端应用程序可以更新跳蚤计数的要求?以下是我一直想到的一些想法:
感谢。
答案 0 :(得分:1)
取决于您的架构设计 - 确实没有一个正确的答案:
1)这听起来像是使用“移动对象”,即整个对象(包括逻辑)可以被序列化并通过线路发送。它也可以被视为没有逻辑的DTO(数据传输对象)。
2)这听起来更多SOA - SOA专注于使服务提供客户端可以使用的直观方法。如果该方法的名称类似于UpdatePuppyFleaCount(puppyId,fleaCount),那么它是有道理的。
3)这也是SOA',但实际上是模糊的,因为它既是Update又是Read操作(如果发送更新的Puppy对象并且服务器使用已提交的Puppy对象响应,则会更有意义 - 客户端必须知道交换,但这并不罕见)。
4)这实际上与用例有关。如果你希望更新跳蚤计数而不对小狗做任何其他事情,那么它是有道理的。如果您希望在更新跳蚤计数后始终与小狗一起工作,那么要求客户端进行两次调用(Web服务调用很慢)是一种糟糕的设计。
5 - 倒数4(读小狗,将小狗实例和新跳蚤计数传递给服务器,获取更新小狗):同样,这更多地取决于用例。如果可能会从UpdateFleaCount()操作中单独使用Read操作(即,您在检索小狗后并不总是想要更新跳蚤计数),那么它很适合。
扩展我对“不是一个正确的答案”的评论......我创造了“银弹规则”(尽管我很确定有人值得注意的是很久以前就打败了我)在编程中从来没有银弹;你总是要权衡不同方法的利弊,成本/收益。关键在于识别和理解不同方法之间的差异
答案 1 :(得分:1)
每个小狗实例都在服务器上维护,服务应该公开获取和设置并刷新puppycount的方法。
答案 2 :(得分:0)
Number 2,修改为返回一个布尔结果,表明更新成功或未成功
答案 3 :(得分:0)
这里还有一些问题(!)。
同一只小狗是在多个客户上举行的吗?如果是这样,那么您可能需要向每个客户广播一个更新,以便在跳蚤更新时刷新它的小狗。
您通常会给客户端一个不可变对象(小狗)。客户端可以更新小狗并确保它仍然是一个有效的对象吗?这不是一个愚蠢的问题 - 客户经常被给予DTO(数据传输对象)并可以随意设置字段。一个适当的对象将确保有效性。
带宽重要吗?你能处理在你的网络上发布多只小狗吗?如果第一个问题的答案是“是”,这一点尤其重要。
鉴于上述情况,我可能会在服务器上调用一个请求对小狗X进行跳蚤更新的方法。服务器可以执行此操作(带有相关的验证),并向所有感兴趣的各方发布更新。更新可能包含一个新的小狗对象(根据您的使用情况,您可能会发布X已更新的小狗,如果感兴趣,客户可以获取新小狗 - 也许这是一个优化太远了)