【发布时间】:2011-03-21 14:36:00
【问题描述】:
我对 IoC 还很陌生,对未来的最佳实践有点坚持。我正在做的项目是在 MVC 中使用 Sharp Architecture 构建的。我们目前使用 IoC 的方式是在每个控制器的构造函数中指定存储库接口,让 Castle Windsor 完成剩下的工作并将这些实例传递给每个模型。然而,由于控制器可能正在实例化许多新模型,这些模型又会调用其他模型等,因此很容易失控,并且一些控制器现在在构造函数参数中具有 20 多个存储库接口。
由于每个控制器都继承了一个 BaseController 我正在考虑创建一个存储库存储库,这只是一个具有 Get() 方法的存储库列表,该方法返回 T 类型的存储库,这可以在基本控制器中实例化/填充只需传递到每个模型中,我们就不必担心所有的存储库都会被传递。
但是这感觉有些不对劲,我不禁觉得温莎城堡应该已经这样做了,但不知道该怎么做。
很想听听您对此的看法。
谢谢。
【问题讨论】:
-
如果您必须将 20 多个存储库注入其中任何一个,或者我错过了什么,感觉就像您的控制器必须承担很多责任? Sharp Architecture 还引入了应用程序服务模式,它可以让您将一些逻辑组合成更小的部分。
-
我同意这种感觉,但系统的不同部分有很多依赖关系。存储库实际上并没有在控制器中使用,它们只是在那里可以实例化模型,并且可以实例化其他模型。我们试图使事情尽可能地解耦,但系统的性质使这变得困难。如果我从头开始,我可能会做不同的事情,虽然我不太确定如何......
-
你也有任何关于应用服务模式的资源,因为谷歌几乎没有透露任何信息 (google.co.uk/…)
-
您看不到是否可以将功能拆分到应用服务?它们的存在是为了在 DDD 项目中编排某些功能。这意味着您不会直接使用控制器中的存储库。
-
查看 Sharp Arch 中的示例:github.com/sharparchitecture/Northwind/blob/master/app/…
标签: asp.net-mvc castle-windsor ioc-container s#arp-architecture