6

得墨忒耳法则(真的应该是得墨忒耳的建议)说你不应该“穿过”一个物体去接触他们的子物体。如果您作为客户需要执行一些重要的操作,那么大多数时候您正在使用的域模型应该支持该操作。

REST 原则上是一个愚蠢的对象层次结构。它就像一个资源/对象的文件系统,其中每个对象都可以有子对象。您几乎总是可以使用 REST。您可以选择使用 REST 技术构建按约定的复合对象类型,只要提供者和客户端就更高级别的操作达成一致,您就可以避免通过。

那么,你如何平衡 REST 和 Demeter?在我看来,它们并不冲突,因为 REST 完全是关于超松散耦合,以至于提供者试图预测客户的所有需求是毫无意义的,而 Demeter 假设逻辑可以迁移到它的通过重构最自然的地方。

但是,您可能会争辩说,在您更好地了解您的客户之前,REST 只是一个权宜之计。REST 只是一个技巧吗?Demeter 在任何服务器/客户端场景中都不现实吗?

4

4 回答 4

5
  • Demeter 在任何服务器/客户端场景中都不现实吗?

我想你在这里回答了你自己的问题。这种方式RESTSOAPXML-RPC在这方面有何不同?

重点REST不是提供超松耦合,而是提供以下内容:

  • 提供准确描述所请求资源的标识符。
  • 提供符合预期的服务GET请求是幂等的,PUT更新记录,POST创建,DELETE删除
  • 最小化存储在服务器上的状态
  • 消除不必要的复杂性

有些情况REST不是最好的答案,但REST总的来说效果很好。

于 2009-04-14T00:26:30.317 回答
2

我不介意该法律/建议。它破坏了聚合和组合的一半好处,我不会拥有它。

于 2009-04-14T00:27:15.463 回答
2

由 RESTful 接口公开的表示提供的链接可以是完全不透明的,而不会违反 REST 的任何约束。因此,我建议 REST 完全符合得墨忒耳法则。不要求链接在其 URL 中公开 URL 空间的结构。

例如,在面向对象的场景中,您可以将调用 abc 替换为 a.bc

在 RESTful 表示中,您可以创建以下内容:

<a>
  <link href="bc"/>
</a>

而不是做

GET a

    <a>
      <link href="b"/>
    </a>

GET b

    <b>
      <link href="c"/>
    </b>

GET c

我不得不不同意 altCognito 并说 REST 的主要目标之一是松散耦合。统一的接口、标准的媒体类型和 HATEOAS 都结合在一起产生了一个极其松散耦合的接口。

回应大卫的评论:

REST is all about super-loose coupling to the point where it is pointless for the provider to try to anticipate all the needs of the clients

Actually, REST is about limiting the clients options by providing only valid links in the representations. Within those constraints the client can attempt to satisfy its own needs. It is by removing the knowledge from the client of when certain requests can be made that you achieve loose coupling. Loose coupling is not achieved by listing a set of resources and saying "ok, you can GET, PUT, POST, DELETE all you want."

于 2009-04-14T03:32:59.773 回答
1

我认为它们真的是正交的。REST 描述了一组由 URI 寻址的资源集合,其中包含一组规范方法:GET、POST 等。如果 REST 例程返回一个 URI,那不是“通过”,而是标识具有相同方法名称的不同对象。

于 2009-04-14T00:28:55.317 回答