有多少参数最适合构造函数

本文关键字:构造函数 多少 参数 | 更新日期: 2023-09-27 18:35:07

我有一个需要重构的 C# 项目。Project 使用 WPF+MVVM Light 工具包。我找到了接收大约 50 个参数(工厂接口)的MainViewModel(...)构造函数。我认为不是,我说的对吗?我很感兴趣,因为我想提高我的OOP思维。谢谢。

附言对不起我的语法。如果您发现错误,请检查我。

有多少参数最适合构造函数

Clean Code: A Handbook of Agile Software Craftsmanship,第40页指出...

函数的理想参数数为零(niladic)。接下来是一个(一元),紧随其后的是两个(二元)。应尽可能避免三个参数(三元论)。超过三个(多角)需要非常特殊的理由 - 然后无论如何都不应该使用。

将这本书视为软件设计的指南,因此在考虑代码结构时提出建议。

50 个工厂接口意味着您的 ViewModel 太大,并且试图同时做太多事情。应将其分解为单独的视图模型,这些视图模型将作为属性显示在主视图模型上。

WPF 允许组合,任何允许 ViewModel 优先的框架(即除 PRISM 之外的任何框架)都将从它遇到的 ViewModel 中组合相应的视图。我不确定MVVM Light,但对于Caliburn.Micro,这几乎不是问题。

如果 MVVM Light 不自动执行此操作,则必须将包含特定子模型视图的 WPF 控件绑定到主视图模型上的子模型属性。

另一种选择是将多个工厂接口捆绑到参数对象中,并将其传递给构造函数,使参数数量从 50 个增加到 4-5 个。这是引入参数对象重构。一些工具(如 ReSharper)为这种重构提供了自动化支持。

如果将其与 DI 容器结合使用,则只需注册各个接口即可自动初始化参数对象。

最好的解决方案是将主模型分解为子模型

你可以考虑使用像Unity这样的依赖注入器。 向 Unity 容器注册所需的所有服务、工厂和关联的类,然后 ViewModel 构造函数只需要一个参数,即 Unity 容器。

构造函数的 50 个参数对我来说似乎很疯狂......