0

我正在处理的项目有很多用于传递 Repository 对象的样板代码。父对象创建一个存储库,将其传递给任何实用程序/辅助方法以执行某些特定工作,然后最终父对象调用提交或保存在存储库上。很多时候,这些实用程序/辅助方法调用其他方法,这也需要存储库。一方面,我们肯定错误地使用了存储库模式,因为许多这些辅助方法实际上只是将存储库用作 DAO 甚至只是一个数据库连接,运行一个快速查询并完成它。我的问题是避免传递这些存储库的最佳方法是什么?

最原始的方法是在这些辅助方法中创建存储库,然后销毁它们(使用子句),这样做有明显的缺点,而且它不利于 DRY。

我还看到人们将这些存储库注册为服务并以这种方式使用它们的示例。

请考虑线程安全。

专家对此有何看法?任何例子将不胜感激。

PS。我是一名高级 Java 人员,但几乎是 C# 的入门级,所以任何与 Java 相关的比较也会很棒。

4

1 回答 1

2

注册和检索存储库的“正确”方法是使用 DI 容器(我推荐Autofac

builder.RegisterType<MyRepository>().AsImplementedInterfaces().InstancePerLifetimeScope();

InstancePerLifeTimeScope意味着它是线程范围的,因此每个线程只有一个实例。每个需要存储库的对象都将存储库接口作为构造函数依赖项。对于某些服务,存储库可以是方法参数。

存储库将使用(微)ORM 与数据库“对话”。在某些情况下,您需要可以直接从数据库中检索的数据甚至某些对象。在这种情况下,您有一个服务而不是一个存储库,尽管这两个实现(不是接口)都属于 DAL。

我假设所有的服务和存储库都作为抽象传递,所以每个需要服务或存储库的对象将只知道 IService 或 IRepository。DI 容器将注入具体类型,客户端对象不需要知道这些。

于 2013-04-17T07:31:15.437 回答