我有一个需要重构的C#项目。 Project使用WPF + MVVM Light工具包。我找到了MainViewModel(...)
构造函数,它接收了大约50个参数(工厂接口)。我想不是。我对吗?我很感兴趣,因为我想提高我的OOP思维。感谢。
P.S。对不起我的语法。如果您发现错误,请检查我。
答案 0 :(得分:3)
Clean Code: A Handbook of Agile Software Craftsmanship,第40页,声明......
函数的理想参数数量为零(niladic)。接下来是一个(monadic),紧接着是两个(二元)。应尽可能避免三个论点(三元论)。超过三个(polyadic)需要非常特殊的理由 - 然后无论如何都不应该使用。
将本书视为软件设计的指南,并在考虑代码结构时提出建议。
答案 1 :(得分:2)
50个工厂界面意味着您的ViewModel太大了,并且试图同时做太多事情。您应该将其分解为单独的ViewModel,它将在主视图模型中显示为属性。
WPF允许组合和任何首先允许ViewModel的框架(即除PRISM之外的任何东西)将构成它遇到的ViewModel的相应视图。我不确定MVVM Light,但使用Caliburn.Micro这几乎不是问题。
如果MVVM Light没有自动执行此操作,则必须将包含特定子模型视图的WPF控件绑定到主视图模型上的子模型属性。
另一种选择是将多个工厂接口捆绑到参数对象中并将它们传递给构造函数,使参数数量为4-5而不是50.这是Introduce Parameter Object重构。像ReSharper这样的工具为这种重构提供了自动化支持。
如果将它与DI容器结合使用,只需注册各个接口即可自动初始化参数对象。
最好的解决方案是将主模型分解为子模型
答案 2 :(得分:-2)
您可能会考虑使用像Unity这样的依赖注入器。使用Unity容器注册所需的所有服务,工厂和相关类,然后只需要一个ViewModel构造函数的单个参数即Unity容器。
构造函数的50个参数对我来说似乎很疯狂......