7

リポジトリ クラスの「GetById」メソッドからロードされるモデル クラスがあります。このエンティティに追加のプロパティを追加する必要があります。これらはデータベースには保存されませんが、サービス クラスによって計算されます。何かのようなもの:

public class MyEntity
{
    public int ThingId { get; set; };
    public string ThingName { get; set; }

    // Set from the service
    public int WooFactor { get; set; }
}

public class WooFactorGenerator
{
    public int CalculateWooFactor(MyEntity thing); // Hits other services and repo's to eventually determine the woo factor.
}

// Code to get a "MyEntity":

var myEntity = repo.GetById(1);
var gen = new WooFactorGenerator();
myEntity.WooFactor = gen.CalculateWooFactor(myEntity);

したがって、MyEntity オブジェクトをロード/サチュレートするには、データベースからロードし、ジェネレーターを呼び出して「ウー ファクター」(エヘム) を決定する必要があります。アーキテクチャの観点から、このコードはどこに行くべきですか? 現在の考え:

1) リポジトリ内: ここに追加すると、リポジトリに責任を押し付けすぎているように感じます。

2) 「MyEntity」クラス。アクセス時に WooFactor を遅延ロードするコードをここに追加します。これにより、MyEntity に多くの依存関係が追加されます。

3) 別のサービス クラス - やり過ぎで不必要に思えます。

4

4 に答える 4

2
  • WooFactor純粋にプロパティに依存している場合はMyEntity、内部で行う必要がありますMyEntity
  • 外部情報 (構成、ルールなど) が必要な場合は、Repository 外部の別のサービスである必要があります。WooEntityこの追加のプロパティを使用して here を作成します。

いずれにせよ、決してRepository.

于 2011-05-03T13:38:58.870 に答える
2

Google CQRS. あなたがする必要があるのは、読み取りと書き込みの問題を分離することです。エンティティ以外で計算が必要な場合は、答えがすぐにわかります。

于 2011-05-03T13:41:07.493 に答える
1

最近、エンティティを生成するためにさまざまなデータを集約する必要があるという同様の問題に遭遇しました。私は最終的に、my の構築とEntityEntity

あなたの例を使用すると、次のようになります。

public MyEntityService
{
  public MyEntity GetById(int id)
  {
    MyEntity myEntity = _repo.GetById(id);
    myEntity.WooFactor = _wooFactorGenerator.CalculateWooFactor(myEntity);
    return myEntity;
  }
}

Entityとのやり取りはすべてサービスを介して行われたため、最終的にはこれがプロジェクトにとって最善の結果をもたらしました。

于 2011-05-03T13:43:28.417 に答える
0

リポジトリからのデータの取得を管理する方法は基本的に正しいので、最も一般的なアプローチはサービスに対して同じことを行うことです。一貫したアーキテクチャとアプローチを持つことには多くの利点があります。

それに関する大きな注意点は、依存関係の管理です。私の一般的な仮定は、このようなシナリオでは、物理データアクセスが抽象化されているため、モデルがSQLやファイルシステムなどに技術的に関連付けられていないため、このアプローチを使用すると、さまざまなリポジトリのさまざまなデータを公開できます。一貫した方法。

  • 遅延読み込みを使用するというあなたの考えは良いです。技術的な依存関係を抽象化すると、そのオプションに関する主な懸念事項はなくなります。
  • 別のサービスクラスはやり過ぎのように見えるかもしれませんが、依存関係をより適切に制御できることを意味する場合、支払うのは少額です。
于 2011-05-04T03:49:08.710 に答える