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 回答