gpt4 book ai didi

entity-framework - Autofac 存储库模式和工作单元

转载 作者:行者123 更新时间:2023-12-02 04:49:34 24 4
gpt4 key购买 nike

我搜索了一下,我很困惑。

First Approach使用 Autofac 为每个实体使用存储库和服务。工作单元类没有存储库。因此,您应该创建每个存储库,而不是仅在调用者构造函数中创建一个工作类单元。

OrderService(IUnitOfWork unitOfWork, IUserRepository userRepository,IOrderRepository orderRepository,IBalanceRepository balanceRepository)

Second Approach仅使用通用存储库。它使用扩展类而不是为每个实体使用一个存储库。工作单元类具有通用存储库。因此,您可以在调用者类构造函数上创建一个工作单元类。
OrderService(IUnitOfWork unitOfWork)

在这种方法中,我们为存储库使用一个通用类,但我们为每个实体创建一个存储库对象。如果这种方法很好,我该如何使用 Autofac 实现它?

Third Approach Autofac 使用一个通用存储库和一个对象作为通用存储库。它使用泛型方法而不是泛型类。但是通用存储库具有工作单元而不是相反的单元。这是反模式吗?
OrderService(IUnitOfWork unitOfWork,IGenericRepository repository)

我应该使用哪种方法?

最佳答案

工作单元和存储库模式的意义在于准确描述例如用例所需的内容。因此,对于每个实体都有存储库或可以通过通用方法为任何实体创建存储库的工作单元与返回 IQueryable 的存储库一样要避免。最后一个缺陷会将您的 Dal 移动到您的域模型甚至 UI(想象一下过滤器逻辑的编写位置以及过滤器执行的确切时间以及将引发任何异常的位置),第一个缺陷创建了一种单一的应用程序并使其变得困难编写单元测试。一个工作单元(接口(interface))只有您的用例需要的 3 个存储库和三个只有所需方法的存储库(接口(interface)),返回单个对象或对象列表更容易模拟、测试和指定正是用例需要什么并将其传达给您的开发人员(或 2 年后您自己)。接口(interface)可以由一个大的工作单元类和可能的几个标准存储库类来实现(如果您选择),但这是一个不同的决定,应该由技术指导(早期版本中的 EF 代码优先)一个数据库中的多个上下文)和应用程序的复杂性。

关于entity-framework - Autofac 存储库模式和工作单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29972201/

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