具有存储库的域/模型对象上的静态方法
本文关键字:模型 对象 静态方法 存储 | 更新日期: 2023-09-27 18:33:42
我为每个实体都有单独的存储库类。现在我想在使用存储库实例的域对象上实现一些静态方法,但这种方法的缺点是,我必须在静态变量上保存存储库实例(这在 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、方法 2。
您可以考虑使用 IoC 容器将上下文注入存储库,并将存储库注入域服务。IoC 容器还可以处理上下文和存储库的生命周期。对于 Web,每个请求一个实例是常见的。