我最终在模型类的构造函数中有大约20个不同的参数,每个服务一个?这是正常现象还是某些事情已经消失的迹象。
答案 0 :(得分:2)
我认为,绝对地,您的控制器正在与太多服务进行交互。我没有看到你的代码 - 所以我想要假设 - 但在我看来,你的控制器通过调用众多“小”服务来构建业务逻辑,而不是依靠构成业务逻辑的更少“更大”的服务来自较小的服务。
浏览一下有关“编排服务”与“实体”或“功能”服务的信息,您将看到我的意思。如果您创建为您的控制器提供所需逻辑的编排服务,则您的架构会得到改进,因为您的控制器根本不应包含任何业务逻辑。
我真的认为你消耗的服务数量就是问题所在。 IoC容器可以通过某种方式解决如何将类型绑定到注入参数等问题,但我认为问题在于您的架构。
答案 1 :(得分:1)
您可以尝试合并某些服务或考虑将控制器视图部件重构为较小的范围组件。此外,像Spring这样的依赖注入样式框架可以帮助解决这个问题。
答案 2 :(得分:1)
虽然我不知道你的设置。 20似乎有点多我认为你反对SRP(单一责任原则)。但由于我看不到你的代码,所以无法分辨。如果您确实需要在该模型类中使用所有这些服务,那么您可能需要将它们放在工厂类中并将其用作参数。
由于我们不了解您的域名,因此很难给出任何好的答案。
答案 3 :(得分:0)
正如@Matt所说,依赖注入可以帮助你,sprint.NET是一个很好的,还有其他几个。
看到你特别提到MVP,你至少应该看看现在有 Unity 的Ent Lib 4.1,微软对DI的看法。如果这是新的,他们的codeplex网站可能是一个很好的起点。
还有software factories 与visual studio集成,并为您提供了为链接或Web服务创建网站MVP的工具。这些也来自模式和实践。