gpt4 book ai didi

java - 客户端服务器设计问题: Maintaining State On Both

转载 作者:行者123 更新时间:2023-11-30 05:13:56 28 4
gpt4 key购买 nike

感谢您花时间查看我的问题!

假设有一个 Web 服务(restful、SOAP、XML/JSON,无论你想要什么),并且它是一个关于小狗的服务。就本问题而言,小狗可以有两个成员变量。第一个是小狗的唯一 ID。另一个数据成员是“跳蚤数量”(Flea Count)。

小狗服务提供的功能之一可能是“根据小狗的 ID 返回代表小狗的对象。”

您将如何处理客户端应用程序可以更新跳蚤计数的要求?以下是我自己想到的一些想法:

  1. 您是否让客户端在客户端更新小狗的跳蚤计数,然后将整个对象发送回服务,以便更新其状态?
  2. 您是否创建了一个方法,该方法接受小狗 ID 和新的跳蚤计数,以便将客户端与服务器同步,但不发回任何内容?
  3. 您是否创建了一个方法,该方法接受小狗 ID 和新的跳蚤计数,但让服务响应整个更新的对象,然后替换客户端现有的小狗(哦不!)?
  4. 您是否创建一个接受小狗 ID 和新的跳蚤计数的方法,该方法会更新服务器,但客户端必须调用与按 ID 返回小狗对象相关的方法,并替换客户端上的小狗(消灭这个想法!)?
  5. 其他?

谢谢。

最佳答案

取决于您的架构设计——确实没有一个正确的答案:

1) 这听起来像是使用“移动对象”,即整个对象(包括逻辑)可以被序列化并通过网络发送。它也可以被视为没有逻辑的 DTO(数据传输对象)。

2) 这听起来更像 SOA——SOA 专注于让服务提供客户端可以使用的直观方法。如果该方法的名称类似于 UpdatePuppyFleaCount(puppyId, fleaCount) 那么它就有意义。

3) 这也是 SOA 风格,但确实模糊了界限,因为它既是更新操作又是读取操作(如果您发送更新的 Puppy 对象并且服务器使用提交的 Puppy 对象进行响应,则会更有意义 -客户端必须知道要进行交换,但这并不罕见)。

4) 这确实取决于用例。如果您希望更新跳蚤数量而不对小狗做任何其他事情,那么这是有道理的。如果您希望在更新跳蚤计数后始终与小狗一起工作,那么要求客户端进行两次调用(网络服务调用速度很慢)的设计很糟糕。

5 - 4 的倒数(读取小狗,将小狗实例和新的跳蚤计数传递到服务器,返回更新的小狗):同样,这更多地取决于用例。如果 Read 操作可能与 UpdateFleaCount() 操作分开使用(即您并不总是希望在检索小狗后更新跳蚤计数),那么它就很适合。

<小时/>

扩展我关于“没有一个正确答案”的评论......我创造了“银弹规则”(尽管我确信很久以前就有人打败了我),在编程中从来没有一颗银弹;你总是必须权衡不同方法的利弊、成本/ yield 。关键是识别和理解不同方法之间的差异

关于java - 客户端服务器设计问题: Maintaining State On Both,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2344491/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com