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.
}
4

1 に答える 1

2

静的な可変状態はひどいです。限目。リポジトリにはコンテキストが含まれ、コンテキストには大量の可変状態が含まれます。それに加えて、コンテキストのライフサイクルは短いと想定されています。そして:あなたのドメインクラスはリポジトリとは何の関係もないはずだと思います。これは疑似カプセル化です。代わりに、ドメインサービスにMethod1、method2を処理させます。

IoCコンテナを使用して、リポジトリにコンテキストを挿入し、ドメインサービスにリポジトリを挿入することを検討してください。IoCコンテナは、コンテキストとリポジトリのライフサイクルも処理できます。Webの場合、リクエストごとのインスタンスが一般的です。

于 2012-05-09T16:02:07.027 に答える