2012-05-09 20 views
0

私は各エンティティごとに別々のリポジトリクラスを用意しています。今は、リポジトリインスタンスを使用するドメインオブジェクトにいくつかの静的メソッドを実装したいと思いますが、このアプローチの欠点は、静的変数(Webアプリケーションでうまく動作しません)でリポジトリインスタンスを保持するか、各静的メソッドの新しいインスタンスこれにはより良いアプローチがありますか(つまり、リポジトリインスタンスでドメインクラスに静的メソッドを実装する)か?あなたのアイデアを共有してください。リポジトリを持つドメイン/モデルオブジェクトの静的メソッド

ベースリポジトリ:エンティティリポジトリ当たり

public abstract class AbstractRepository<TEntity> : IabstractRepository<TEntity> 
    where TEntity : EntityObject 
{ 
    protected CivilRegistryEntities civilContext; 

    public AbstractRepository() 
    { 
     civilContext = CivilRegistryEntities.Instance; // Per HTTP request singletone. 
    } 

    // Other method implementation goes here. 
} 

public class BirthReportRepository : AbstractRepository<BirthReport> 
{ 

} 

ドメイン/エンティティ/オブジェクトモデル:

public partial class BirthReport 
{ 
    //Not works well in web application. 
    private static BirthReportRepository repository = new BirthReportRepository(); 

    public static BirthReport Method1() 
    { 
     return repository.SomeMethod(); 
    } 

    public static BirthReport Method2() 
    { 
     return repository.SomeOtherMethod(); 
    } 

    // Other methods(both static and instance) goes here. 
} 

答えて

1

静的可変状態は恐ろしいです。期間。リポジトリにはコンテキストが含まれ、コンテキストには多数の変更可能な状態が含まれます。それに加えて、コンテキストはライフサイクルが短いと考えられています。そして:私はあなたのドメインクラスはリポジトリとは関係がないと思います。これは疑似カプセル化です。代わりに、ドメインサービスはMethod1、method2を処理します。

リポジトリにコンテキストを挿入するためにIoCコンテナを使用し、ドメインサービスにリポジトリを挿入することを検討することがあります。 IoCコンテナは、コンテキストやリポジトリのライフサイクルも処理できます。 Webの場合、リクエストごとのインスタンスは共通です。

+0

リポジトリには低レベル操作(LINQ to SQL)とベースリポジトリ(AbstractRepository )が含まれ、基本的なCRUD操作が実装されています。ドメインクラスで直接すべてのメソッドを処理することは、コードの重複にすぎません!まあ、IoCは良い選択肢かもしれない。 – NaveenBhat

+0

_2つのコードの重複_私はあなたが何を意味するか分かりません、それは良いか悪いですか?とにかく、どこでも静的メソッドを保持することができます。静的メソッド(完全に合理的かもしれません)を使用したい場合、私はそれらを静的クラスに入れて、それは明らかにユーティリティ(またはサービス)クラスです。しかし、それとは別に、あなたの文脈を短命に保つことが良い習慣であると私は考えます。また、静的メソッドをステートレスに保ちます。 –

+0

挿入、プライマリキーによる選択の更新、すべて選択、リフレッシュは、各ドメインオブジェクトで繰り返さない一般的な方法のほんの一部です。したがって、これらのタスクを実行するベースリポジトリと、他の低レベルのタスクを実行するためのリポジトリを作成しました。これらは静的ではありません。 – NaveenBhat

関連する問題