我正在使用 .net c# Mvc,使用 ninject 存储库模式。我的问题是,在开发时我在函数中使用重用,每次我想从 db 获取更多信息并需要访问另一个表时,我需要从所有调用此函数的地方传递存储库。我做错了吗?这就是这种方式,它的开发时间要长得多,然后只是打开一个连接并在函数结束时进行处理。
问问题
185 次
2 回答
2
如果您的班级需要传入大量的存储库,这有时可能表明您的班级正在做太多事情并且可能违反单一职责原则。也许如果你把这个类分成更小更专业的类,问题就不会那么糟糕了。
另一方面,有时传递大量存储库是不可避免的。您可能会考虑创建一个工厂类来为您创建遭受“构造函数堵塞”的类 - 这应该可以节省一些输入,因为大量的构造函数初始化只是在一个地方(在工厂类中)。
编辑:一个非常简单的“工厂”类可能如下:
public class FactoryClass
{
public ClassWithLotsOfRepositories GetClassWithLotsOfRepositories()
{
return new ClassWithLotsOfRepositories(new repository1(),
new repository2(), new repository3() );
}
}
因此,您现在可以创建 ClassWithLotsOfRepositories 的实例,而不必每次都在构造函数中指定存储库。
ClassWithLotsOfRepositories myClassThatUsesLotsOfRepositories = new FactoryClass().GetClassWithLotsOfRepositories();
我的示例具有通过构造函数传入的具体类。您正在使用 Ninject,所以大概有需要解析的接口 - 我只是保持这个例子简单来说明这个概念。
于 2012-10-24T10:20:41.207 回答
0
使用一个工作单元新建所有的存储库。这样,您可以将 uow 传递到您的控制器中,并在需要时访问所有存储库。
于 2018-07-05T20:58:13.153 回答