Clean Code Book by Robert Cecil Martin

本文关键字:Cecil Martin Robert by Code Book Clean | 更新日期: 2023-09-27 17:52:53

我知道以前有人问过这个问题,但我不完全理解答案,也不觉得这个问题和这个完全一样。

在Robert Cecil Martin的《Clean Code book》一书中,他建议你应该…

  • 首选不传递任何参数
  • 如果必须传递参数,则只传递一个。
  • 只有在极少数情况下才会超过这个值。

这让我很困惑…

那么基于这个哪个是正确的呢?

这门课…

 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);

或者,This class…

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个参数在一个新的类,但然后你最终与该类相同的问题,因为你必须要么单独传递所有的参数或通过那里的属性直接访问它们。

Clean Code Book by Robert Cecil Martin

如果没有必要,我不会创建特定的FourNumberAdder。相反,我会使用构建器模式,其中NumberAdder是通过使用NumbersBuilder创建的。这个构建器可以是FourNumbersBuilderTenNumbersBuilder甚至ThousendNumbersBuilder。而不是每个数字的getter,我将创建一个Indexer,它返回在特定位置的数字。

毕竟,我认为这是不可能给你的答案一个通用的解决方案,因为就像之前提到的,它取决于用例。

因为如果我上面的解释,我建议以示例#3为例,它与构建器模式相似。

你的例子非常假设性,没有多大意义。设计决策应该由用例驱动。这有助于使您的体系结构表达那些用例,而不是一些技术细节。

因此,不能轻易地说选项#1、#2或#3是最好的,因为您的代码没有真正的用例。没有一个理智的开发者会编写一个FourNumberAdder

话虽如此,我认为选项#3是最有意义的,因为它正确地捆绑了属于在一起的参数