我知道以前曾经问过这个问题但是我没有完全理解答案,也没有觉得这个问题和这个问题完全相同。
在罗伯特塞西尔马丁的清洁法典书中,他建议你应该采用哪种方法......
这让我感到困惑......
所以基于这个是正确的吗?
这个班......
class FourNumberAdder
{
public int Num1 { get; }
public int Num2 { get; }
public int Num3 { get; }
public int Num4 { get; }
public FourNumberAdder(int n1, int n2,int n3,int n4 )
{
this.Num1 = n1;
this.Num2 = n2;
this.Num3 = n3;
this.Num4 = n4;
}
}
有了......
FourNumberAdder FNA = new FourNumberAdder(1,2,3,4);
或者,这个班......
class FourNumberAdder
{
public int Num1 { get; set; }
public int Num2 { get; set; }
public int Num3 { get; set; }
public int Num4 { get; set; }
}
有了......
public void go()
{
FourNumberAdder FNA = new FourNumberAdder();
FNA.Num1 = 1;
FNA.Num2 = 2;
FNA.Num3 = 3;
FNA.Num4 = 4;
}
或这两个班......
class FourNumberAdder
{
public int Num1 { get; set; }
public int Num2 { get; set; }
public int Num3 { get; set; }
public int Num4 { get; set; }
public FourNumberAdder (FourNumbers fn)
{
this.Num1 = fn.Num1;
this.Num2 = fn.Num2;
this.Num3 = fn.Num3;
this.Num4 = fn.Num4;
}
}
class FourNumbers
{
public int Num1 { get; set; }
public int Num2 { get; set; }
public int Num3 { get; set; }
public int Num4 { get; set; }
}
有了......
FourNumbers fn = new FourNumbers();
fn.Num1 = 1;
fn.Num2 = 2;
fn.Num3 = 3;
fn.Num4 = 4;
FourNumberAdder FNA = new FourNumberAdder(fn);
还是其他什么?请注意我认为最后一个选项是正确的,因为它将4个参数“捆绑”到一个新类中,但是你最终会遇到与该类相同的问题,因为你必须单独传递所有参数或访问他们直接通过那里的财产。
希望这很清楚。
答案 0 :(得分:2)
如果不是必要的话,我不会创建特定的FourNumberAdder
。相反,我会使用构建器模式,其中使用NumberAdder
创建NumbersBuilder
。此构建器可以是FourNumbersBuilder
,TenNumbersBuilder
甚至是ThousendNumbersBuilder
。而不是每个数字的吸气剂,我会创建一个Indexer
,它返回特定位置的数字。
毕竟我认为不可能为你的答案提供一般解决方案,因为之前提到它取决于用例。
因为如果我上面的解释我建议采用第3号示例,那么它与构建器模式类似。
答案 1 :(得分:1)
你的例子非常假设,并没有多大意义。设计决策应该由用例驱动。这有助于使您的架构表达这些用例,而不是一些技术细节。
因此,不能轻易地说选项#1,#2或#3是最好的,因为您的代码没有真正的用例。没有理智的开发人员会编程FourNumberAdder
。
话虽如此,我认为选项#3最有意义,因为它正确地捆绑了属于一起的参数。