gpt4 book ai didi

asp.net - 存储库是单例的还是静态的还是都不是?

转载 作者:行者123 更新时间:2023-12-03 15:19:39 24 4
gpt4 key购买 nike

我有一个 ASP.NET 网站,它使用域驱动设计并使用存储库进行数据库操作。
我想知道单例存储库和静态存储库以及简单存储库类的优缺点是什么,它们在每次访问时都是新的?
此外,如果有人可以比较并指导我使用其中哪一个,我将不胜感激。

最佳答案

静态和单例不是存储库模式的好解决方案。如果您的应用程序将来会使用 2 个或更多存储库怎么办?

IMO 最好的解决方案是使用依赖注入(inject)容器并将您的 IRepository 接口(interface)注入(inject)需要它的类中。

我建议你阅读一本关于领域驱动设计的好书和一本关于依赖注入(inject)的好书(比如 Mark Seeman 的 Dependency Injection in .NET)。

使用单例和静态类,您的应用程序将无法扩展

您有两个单例存储库:

class Repository<TEntity> {

static Repository<TEntity> Instance { get { ... /*using sql server*/ } }
}

class Repository2<TEntity> {

static Repository2<TEntity> Instance { get { ... /*using WCF or XML or any else */ } }
}

使用它们的服务必须具有对其中之一或两者的静态引用:
class OrderService {

public void Save(Order order) { Repository<Order>.Instance.Insert(order); }
}

如果存储库被静态引用 ,如何使用 Repository2 保存订单?

更好的解决方案是使用 DI:
interface IRepository<TEntity> { ... }

class SqlRepository<TEntity> : IRepository<TEntity> { ....}

class OrderService {
private readonly IRepository<TEntity> _repo;

public OrderService(IRepository<TEntity> repo) { _repo = repo; }

public void Save(Order order) { repo.Insert(order); }
}

关于asp.net - 存储库是单例的还是静态的还是都不是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7463005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com