私たちは新しいプロジェクト (既存のアプリを書き直す) に取り組んでおり、ドメイン モデル / リポジトリの設計で問題が発生しています。
これは、ドメイン モデルの 2 つの重要な部分の (簡略化された) バージョンです。
ご覧のとおり、私はPostの抽象的な概念を持っています。これは、レビュー、ディスカッション、写真、ビデオなどのようなものです。投稿にはコメントを含めることもできます。
また、場所の抽象的な概念もあり、これは明らかに通り、都市、近隣などです。
さて、これは自然に私には 2 つの明確な集合根として見えました。
そこで、2 つのリポジトリを作成しました。1 つはPostRepositoryと呼ばれ、もう1 つはLocationRepositoryと呼ばれます。
これはすべて正常に機能していました。これら 2 つのリポジトリのいずれかを介して、任意のタイプの投稿 (またはコメント) を追加/取得し、任意のタイプの場所を追加/取得できます。
しかし、今は都市の「ランディング ページ」のシナリオにいます (たとえば)。
このページでは、基本的に「この場所のすべての投稿」を表示する必要があります。
それはどのように定義されていますか?まあ、投稿は(オプションで)場所でタグ付けできます。実装の詳細なので、データに深く入り込みたくはありませんが (それは DDD の目的ではないため)、基本的には、場所のシェープ ファイルによって特定の場所にどの投稿が含まれているかを判断するための地理空間インテリジェンスがあります。タグ付けされた投稿の緯度/経度。
しかし、境界を越えずにこの情報を取得するにはどうすればよいでしょうか?
どのリポジトリを使用しますか? 新しいものが必要ですか?
重要な場合 (または好奇心旺盛な場合)、これは SQL Server 2008 データベースと Entity Framework 4.0 を備えた Web アプリケーション (ASP.NET MVC) です。
説明が必要な場合はお知らせください。
編集
現在、ドメイン モデルを取得するために仕様パターンの修正版を使用しています。
たとえば、スコア >= 4 のすべてのレビューを取得する BLL のコードは次のとおりです。
var reviews = postRepository // GenericRepository<Post>
.Find() // IQueryable<Post>
.OfType<Review>() // IQueryable<Review>
.Where(x => x.Score >= 4)
.ToList(); // List<Review>
しかし今、次のようなコードが必要です。
var reviews = postRepository
.Find()
.OfType<Review>()
.Where( //lat long, or Locations FK )
.ToList();
問題は、中間結合エンティティ (LocationPost - 多対多であるため) を追加せずに上記のクエリを実行する方法がわからず、それに Post ドメイン モデルに FK を追加することです。
でもそうする事で、私は総計の境界を越えていますね。