【问题标题】:Handling many repositories in Castle Windsor/Sharp Architecture处理 Castle Windsor/Sharp Architecture 中的许多存储库
【发布时间】:2011-03-21 14:36:00
【问题描述】:

我对 IoC 还很陌生,对未来的最佳实践有点坚持。我正在做的项目是在 MVC 中使用 Sharp Architecture 构建的。我们目前使用 IoC 的方式是在每个控制器的构造函数中指定存储库接口,让 Castle Windsor 完成剩下的工作并将这些实例传递给每个模型。然而,由于控制器可能正在实例化许多新模型,这些模型又会调用其他模型等,因此很容易失控,并且一些控制器现在在构造函数参数中具有 20 多个存储库接口。

由于每个控制器都继承了一个 BaseController 我正在考虑创建一个存储库存储库,这只是一个具有 Get() 方法的存储库列表,该方法返回 T 类型的存储库,这可以在基本控制器中实例化/填充只需传递到每个模型中,我们就不必担心所有的存储库都会被传递。

但是这感觉有些不对劲,我不禁觉得温莎城堡应该已经这样做了,但不知道该怎么做。

很想听听您对此的看法。

谢谢。

【问题讨论】:

  • 如果您必须将 20 多个存储库注入其中任何一个,或者我错过了什么,感觉就像您的控制器必须承担很多责任? Sharp Architecture 还引入了应用程序服务模式,它可以让您将一些逻辑组合成更小的部分。
  • 我同意这种感觉,但系统的不同部分有很多依赖关系。存储库实际上并没有在控制器中使用,它们只是在那里可以实例化模型,并且可以实例化其他模型。我们试图使事情尽可能地解耦,但系统的性质使这变得困难。如果我从头开始,我可能会做不同的事情,虽然我不太确定如何......
  • 你也有任何关于应用服务模式的资源,因为谷歌几乎没有透露任何信息 (google.co.uk/…)
  • 您看不到是否可以将功能拆分到应用服务?它们的存在是为了在 DDD 项目中编排某些功能。这意味着您不会直接使用控制器中的存储库。

标签: asp.net-mvc castle-windsor ioc-container s#arp-architecture


【解决方案1】:

存储库的存储库,听起来像工作单元模式。您可以做的是注入一个IUnitOfWorkFactory,它允许您创建新的IUnitOfWork 实例。一个包含所有存储库的工作单元实例。

寻找这种实现的例子here

就个人而言,我不会将存储库甚至工作单元实例注入控制器,而是将服务注入控制器。该服务将具有工作单元或存储库作为依赖项。

【讨论】:

  • 我也同意问题 cmets 中所述的“注入服务而不是存储库”。
  • 目前我们有一个相当大的系统,基本上没有服务层。我不禁感到,至少对我们来说,它只会增加另一层复杂性而不会带来太多收益。这可能只是因为我并不真正了解好处或一般模式。你知道这种模式有什么好的例子吗?最好显示控制器、模型和存储库如何交互。谢谢
  • @Ben:控制器用于“控制”视图,而不是用于执行面向业务的工作。你的控制器可能做的太多了,你没有遵循单一职责原则(SRP)。如果您有一个“相当大的系统”,您肯定会从遵循 SRP 中受益。我们添加抽象层来控制复杂性。添加应用程序服务并不是那么抽象。实际上这很简单,因为@MikeEast 已经链接到 cmets 中的一个。然而,我链接到的IUnitOfWorkFactory 的示例实际上要抽象得多。
猜你喜欢
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多