3

データをロード、保存、更新するためのメソッドを持つデータ オブジェクトがあります。次に、このデータをより複雑に操作するためのオブジェクトを用意します。そのためには、データ オブジェクトから精巧なデータを必要とします。

そこで、操作オブジェクトが知る必要がある特定の質問に答えるために、データ オブジェクトにメソッドを追加し始めました。操作オブジェクトには、操作または何らかの機能に厳密に関連するメソッドしかありませんが、データオブジェクトに関する情報はそれによって作成されます。操作するオブジェクトが要求し、操作されるオブジェクトが応答します。最初に想像した通りです。それから、それらがオブジェクトを操作するメソッドまたは拡張メソッドである可能性があることに気付きました。

データ オブジェクトには、特定の機能に関連するメソッドが多すぎると感じています。さらに多くのメソッドが追加される予定です。これらの機能は主に操作オブジェクトによって管理されるため、オブジェクト間で移動および分散できます。問題は、これらのメソッドのいくつかが異なる操作オブジェクトによって使用され、操作オブジェクトが特に操作に関連するメソッドで十分に満たされていることです。したがって、別のオプションは、それらを静的拡張メソッドとして実装し、そのような作業が実行される名前空間に配置することです (したがって、それらは作業領域からのみ表示されますが、必要に応じて他のオブジェクトから呼び出すことができます)。

問題は、次のようなメソッドをどこに置くかです。

  • いかなる種類の操作もなしに、データ オブジェクト情報 (公開情報) から作成された情報を提供します。
  • 特定の機能のための1つまたはいくつかの他のオブジェクトの特定の使用のためのものです(主に操作ですが、クエリとプレゼンテーションも含まれます)
  • (ヘルパー ビジネス オブジェクトを使用するものもあれば、データ オブジェクトのみに依存し、他に何も必要としないものもあります)

それらは次のものに属します:

  • データオブジェクト
  • 操作オブジェクト
  • ビジネス名前空間の静的ヘルパー クラスに?

答えは、話しているメソッドやアプリケーションの設計などに大きく依存すると思います。そのため、特定のアドバイスを提供するのが難しい場合があることは理解していますが、これについて決定を下すのに役立つヒントをいただければ幸いです。その他の場合。

手短に:

メソッドをどこに配置するかを選択するために、どのような基準や質問を自問する必要がありますか?

4

1 に答える 1

2

私の個人的な経験では、オブジェクト (またはクラス) ごとに単一の責任/機能/機能などを配置すると、非常にうまく機能します。

そのため、次のことをお勧めします。処理する必要があるデータ オブジェクトの種類ごとに 1 つのクラスを作成します。例: DataObjectA、DataObjectB これらのデータ オブジェクトに対して実行する必要がある操作ごとに 1 つのクラスを作成します (または、それらがどの程度似ているかに応じて、ペア操作 x データ オブジェクト タイプごとに 1 つのクラスを作成することもできます)。例: DataObjectLoader、DataObjectASaver、DataObjectAUpdater、そしておそらく DataObjectALoader と DataObjectBLoader も。そのデータのより複雑な操作ごとに 1 つのクラスを作成します。例: DataObjectAComplexThing

複雑なものを実行するために必要な精巧なデータに itelf による「意味」があり、それがドメイン内で認識できる問題であり、簡単に名前を付けることができる場合は、そのためのクラスも作成する必要があります。

DataObject は、そのオブジェクトが何であるかを正確に「定義」するために必要な基本的なクエリにのみ応答する必要があります。

物を置く場所を決定する私の基準は... Thinsには、絶対に必要なメソッド、フィールドなどのみを含める必要があります... 取り除くことができるものはすべて、取り除いて別の場所に置く必要があります(別のクラス、または[もちろん理由の範囲内で])。単一のクラスを使用して、または複数のクラスを使用して問題を解決でき、それらの小さなクラスのそれぞれに「意味」があり、ドメイン内の問題を認識でき、適切な名前を付けることができる場合... 複数の小さなクラスを使用する必要があります... オブジェクト (またはクラス) を構成することは、それらを分割するよりもはるかに簡単です。したがって、機会があればいつでも、ほとんどの場合、それらを小さな構成ブロックに分割します....

ほとんどの人は、ドメイン内の名詞ごとにオブジェクト (またはクラス) を作成し、ドメイン内の動詞ごとにメソッドを作成する必要があると言います。私の経験では、名詞ごとにオブジェクトを作成し、動詞ごとにオブジェクトを作成することをお勧めします。に。例: new SomeVerbThatRepresentsDoingSoething(aDataObject).ExecuteThisVerb(); // その Verb を実装する

于 2012-07-14T20:21:35.010 に答える