1

リポジトリアクセスの場所に関する質問があります。リポジトリが維持するエンティティ内でリポジトリへのアクセスを許可または拒否することは容認されますか?例えばリポジトリパターンとの関係の分離

class Product 
{ 
    public int ProductID {get;set;} 
    public int Name {get;set;} 
    public IList<Product> Products {get;set;} // A Product may be a bulk item that contains several individual items. 
    public int VendorID {get;set;} // Key to another table that list vendor info. 
} 

public class ProductRepository : IRepository 
{ 
    public Product GetProduct(int id) {} 
    public IList<Product> GetProducts() {} 
} 

いくつかの質問:位置する他のテーブルからの情報の検索べき

  1. ?リポジトリ、サービス、エンティティなど。これは、バルク品目のための包含製品にも適用されますか?
  2. これが発生するのはいつですか?製品が取得された時点、またはベンダー/サブ製品がアクセスされた時点

答えて

1

ORM(オブジェクトリレーショナルマッパー)がこのような問題を処理する方法を調べることをおすすめします。彼らが扱う方法は、リポジトリが必要に応じてすべてのシリアライゼーション/デシリアライゼーションを管理するということです。ツリー内の要素をデシリアライズするためには比較的複雑なロジックがあります(レイジーローディングなど)。 ORM空間はこれらの問題の多くを考慮しており、それぞれの潜在的な解決策の徹底的な検討を行うソリューションが存在するため、これは適切な場所です。出発点として、Hibernateがその魔法をどうやって行うのかを考えてみましょう。それはかなり良いデザインを持って広く使用されているORMです。

特に、私はこの種のものを自分で実装しようとすることを強く勧めます。このプロセスの詳細を扱うために、ORMを使用して調べます(再び、Hibernateは私と他の人から非常に推薦されます)。彼らはこのようなことをする際に出てくる多くの問題を解決しました。

+0

お返事ありがとうございます。私はNHibernateを見てきましたが、それは実装するために少しの学習があるように見えました。私が取り組んでいるプロジェクトは本当にエクササイズのためのものです。私はしばらくの間、NHibernateの使用に興味を持ってきましたが、おそらく今すぐに潜んでいる時間です。 – Neal

+0

@Neal:あなたの質問は、ORMが回答を提供する方向を正確に見ていることを示しています。 Hibernateを調べることで最大限の結果が得られるはずです。 –

関連する問題