C#具有参数变化设计模式的多个构造函数
我试图重构一些代码,这些代码根据对象需要的配置类型传递不同的参数组合。例如:C#具有参数变化设计模式的多个构造函数,c#,design-patterns,constructor,C#,Design Patterns,Constructor,我试图重构一些代码,这些代码根据对象需要的配置类型传递不同的参数组合。例如: public MyWidget(string server, string port) { ... } public MyWidget(string server) { ... } public MyWidget(bool createAThing, string nameOfThingToBeCreated, string server,
public MyWidget(string server, string port)
{
...
}
public MyWidget(string server)
{
...
}
public MyWidget(bool createAThing,
string nameOfThingToBeCreated,
string server,
string port)
{
...
}
public MyWidget(bool createAThing, string nameOfThingToBeCreated)
{
...
}
…等等
我不想使用属性,因为它感觉它隐藏了一些可能的依赖项,例如,如果已分配端口属性,则对象可能需要传入服务器。不要挂断在示例参数上,这只是我想说的
我查看了构建器模式,但它不是我所需要的。任何建议都很好
我使用的是.NET2.0,您可以使用配置对象并将其传递给构造函数。 大概是这样的:
public class WidgetOptions
{
public string Server { get; set; }
public string Port { get; set; }
...
}
public class MyWidget
{
public MyWidget(WidgetOptions options)
{
Server = options.Server;
Port = options.Port;
...
}
}
实际上,如果目的是始终创建一个“有效”对象,使对象永远不会处于半配置状态,那么构建器模式是合适的。构建器保留数据点,直到它们全部被指定,然后可以一次性创建一个完全配置的对象 但听起来你不相信你的开发人员会阅读文档来知道配置什么……你确实提供了文档,对不对;) 在这种情况下,可以提供一组构建器,每个构建器只公开与最终对象所需的“模式”相关的属性 类似这样的东西(伪代码和虚构的,因为您没有提供任何关于您真正想要建模的信息)
一种变体是将这些排列定义为各种
WidgetOptions
,正如大师道德所说的那样,但每个不同的选项集都是它自己的类。因此,您可能有VectorWidgetOptions
、BitmapWidgetOptions
和AnimatedWidgetOptions
,它们只公开相关的属性集。什么不适合您?这个问题非常普遍,你可以用它来进行一些重构。可能不是很有用,但是在.NET3.0中你有对象初始化器,这意味着你不需要有太多的构造函数@James-这并不是说它不起作用,我只是不想创建我可能需要的所有可能的构造函数组合。我正在试图找出是否有一种方法可以更优雅地完成这项工作。有可能这个类有太多的责任,特别是在查看不同的构造函数签名时——也许重新设计更多的类,每个类的责任更少是正确的方法。我对此做了一些思考,但它仍然要求开发人员确切地知道给定情况下需要哪些组合。
WidgetBuilder
+ whatever properties are common to all widget creation
+ MakeWidget
VectorWidgetBuilder : WidgetBuilder
+ get/set Lines
+ MakeWidget
BitmapWidgetBuilder : WidgetBuilder
+ get/set Image
+ MakeWidget
AnimatedWidgetBuilder : WidgetBuilder
+ get/set Images
+ get/set FrameRate
+ MakeWidget