我在Stack Overflow、Microsoft Developer Network和一些博客中阅读了很多详细的内容。普遍的共识是“AConstructor
不应包含大量参数”。 所以遇到这个让我思考-
- 最初的问题:我的应用程序包含大约 15 个变量,这些变量在整个应用程序中不断使用。 我想出的解决方案是我将创建一个将值注入到
Properties
.
所以这似乎工作得很好,它让我的生活变得很容易,因为我可以通过 传递object
到另一个class
,Constructor
而不必将所有这些变量分配给每个method
。除了这导致另一个问题 -
public class ServerParameters
{
// Variable:
private string template;
private string sqlUsername;
private string sqlPassword;
private string sqlDatabase;
private string sqlServer;
public ServerParameter(string _template, string _sqlDatabase, string _sqlServer,
string _sqlUsername, string _sqlPassword)
{
template = _template;
sqlUsername = _sqlUsername;
sqlPassword = _sqlPassword;
sqlDatabase = _sqlDatabase;
sqlServer = _sqlServer;
}
// Link the private strings to a group of Properties.
}
所以这Constructor
已经变得非常臃肿了-但是现在我需要实现更多的 参数。
- 问题二:所以我有一个臃肿
Constructor
的,并通过实施不完全符合这个特定的其他项目Class
。我对此的解决方案是创建一个subclass
或container
保存这些不同classes
但能够使用这些classes
.
您现在看到了两难境地,这引发了一个非常重要的问题——当您只能继承一次时,您如何构建一个容纳所有这些子类的容器?
为什么不应该在构造函数中使用这么多参数,为什么它确实不好?
我对如何实现 a 的想法,Container
但我觉得我做错了——因为当我尝试使用其中的一些时,我经常得到Null Reference ExceptionParameters
。
public class VarContainer
{
private ServerParameter server;
private CustomerParameter customer;
public VarContainer(ServerParameter _server, CustomerParameter _customer)
{
server = _server;
customer = _customer;
}
}
我假设这是因为内部类本身实际上并没有获得那些分配的变量,但是我完全迷失了实现目标的最佳方法-