6

デメテルの法則(実際にはデメテルの提案である必要があります)は、オブジェクトを「通過」して子オブジェクトに到達するべきではないと述べています。クライアントとして重要な操作を実行する必要がある場合、ほとんどの場合、使用しているドメインモデルはその操作をサポートする必要があります。

RESTは、原則として、オブジェクトのダム階層です。これは、各オブジェクトが子オブジェクトを持つことができるリソース/オブジェクトのファイルシステムのようなものです。ほとんどの場合、RESTを使用します。オプションで、REST手法を使用して従来の複合オブジェクトタイプを構築できます。プロバイダーとクライアントがより高いレベルの操作に同意する限り、リーチスルーを回避できます。

では、RESTとDemeterのバランスをどのように取っていますか?RESTは、プロバイダーがクライアントのすべてのニーズを予測しようとするのは無意味であるという点への超緩い結合に関するものであるため、それらは競合していないように見えますが、Demeterは、ロジックがリファクタリングによる最も自然な場所。

ただし、クライアントをよりよく理解するまでは、RESTは単なる一時的なギャップであると主張することができます。RESTは単なるハックですか?デメテルはどのサーバー/クライアントシナリオでも非現実的ですか?

4

4 に答える 4

5
  • デメテルはどのサーバー/クライアントシナリオでも非現実的ですか?

ここであなた自身の質問に答えたと思います。この点で、またはこの点でどのRESTように異なりますか?SOAPXML-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 の主な目標の 1 つは疎結合であると言わざるを得ません。統一されたインターフェイス、標準のメディア タイプ、および HATEOAS のすべてが組み合わさって、非常に疎結合のインターフェイスが生成されます。

デビッドのコメントに応えて:

REST は、プロバイダーがクライアントのすべてのニーズを予測しようとしても無意味な点までの超疎結合に関するものです。

実際、REST は、表現に有効なリンクのみを提供することで、クライアントのオプションを制限することを目的としています。これらの制約内で、クライアントは自身のニーズを満たすことを試みることができます。疎結合を実現するのは、特定の要求をいつ行うことができるかについてのクライアントからの知識を取り除くことです。疎結合は、一連のリソースを一覧表示して、「必要なだけ GET、PUT、POST、DELETE を実行できます」と言っただけでは達成されません。

于 2009-04-14T03:32:59.773 に答える
1

それらは本当に直交していると思います。RESTは、一連の正規メソッド(GET、POSTなど)を使用してURIによってアドレス指定されたリソースのコレクションを記述します。RESTルーチンがURIを返す場合、それは「到達」しておらず、同じメソッド名を持つ別のオブジェクトを識別しています。

于 2009-04-14T00:28:55.317 に答える