2016-06-29 16 views
0

Ich weiß, dass dies schon einmal gefragt wurde, aber ich habe die Antwort nicht vollständig verstanden, noch fühlte ich, dass die Frage genau die gleiche war wie diese.Clean Code Buch von Robert Cecil Martin

Im Buch Clean Code Buch von Robert Cecil Martin, schlägt er im Hinblick auf Methoden sollten Sie ...

  • Bevorzugen keine Parameter
  • passieren Wenn Sie paramters dann passieren nur einen passieren muss .
  • Ein einziger Pass mehr als dies in seltenen Fällen.

Das hat mich verwirrt ...

auf diese So basiert das richtig?

diese Klasse ...

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; 

      } 

     } 

mit diesem ...

FourNumberAdder FNA = new FourNumberAdder(1,2,3,4); 

Oder Diese Klasse ...

class FourNumberAdder 
    { 
     public int Num1 { get; set; } 
     public int Num2 { get; set; } 
     public int Num3 { get; set; } 
     public int Num4 { get; set; } 



    } 

mit diesem ...

public void go() 
{ 
    FourNumberAdder FNA = new FourNumberAdder(); 
        FNA.Num1 = 1; 
        FNA.Num2 = 2; 
        FNA.Num3 = 3; 
        FNA.Num4 = 4; 
} 

oder diese 2 Klassen ...

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

    } 

mit diesem ...

FourNumbers fn = new FourNumbers(); 

       fn.Num1 = 1; 
       fn.Num2 = 2; 
       fn.Num3 = 3; 
       fn.Num4 = 4; 

      FourNumberAdder FNA = new FourNumberAdder(fn); 

oder etwas anderes? Bitte beachten Sie, ich dachte, die letzte Option wäre richtig, da es die 4 Parameter in eine neue Klasse "bündelt", aber dann haben Sie das gleiche Problem mit dieser Klasse, da Sie entweder alle Parameter einzeln übergeben oder zugreifen müssen sie direkt über dort Eigenschaften.

Hoffe, das ist klar.

+1

Ich persönlich mache eine Ausnahme von dieser Regel für Konstruktorparameter, die nicht in separate Kategorien aufgeteilt werden können (wenn sie subkategorisiert werden könnten, könnten die ctor-Parameter in separate Klassen geschrieben und als weniger Parameter übergeben werden). –

+1

Diese Frage eignet sich jedoch nicht für diese Website, da die Antworten wahrscheinlich subjektiv/meinungsbezogen sind. –

Antwort

2

Ich würde nicht eine spezifische FourNumberAdder erstellen, wenn es nicht wirklich notwendig ist. Stattdessen würde ich ein Builder-Muster verwenden, bei dem ein NumberAdder mit einem NumbersBuilder erstellt wird. Dieser Builder könnte ein FourNumbersBuilder, TenNumbersBuilder oder sogar ein ThousendNumbersBuilder sein. Und anstelle eines Getters für jede Nummer würde ich eine Indexer erstellen, die die Zahl an einer bestimmten Position zurückgibt.

Schließlich denke ich, dass es nicht möglich ist, eine allgemeine Lösung für Ihre Antwort zu geben, denn wie bereits erwähnt, hängt es vom Anwendungsfall ab.

Weil, wenn meine obige Erklärung ich vorschlagen würde, Beispiel Nummer # 3 zu nehmen, ist es dem Erbauermuster ähnlich.

1

Ihr Beispiel ist sehr hypothetisch und macht nicht viel Sinn. Designentscheidungen sollten jedoch durch Anwendungsfälle gesteuert werden. Dies trägt dazu bei, dass Ihre Architektur diese Anwendungsfälle und nicht einige technische Details zum Ausdruck bringt.

Daher kann nicht einfach gesagt werden, dass die Option # 1, # 2 oder # 3 die beste ist, da es keine echten Anwendungsfälle für Ihren Code gibt. Kein vernünftiger Entwickler würde ein FourNumberAdder programmieren.

Das gesagt, ich denke Option # 3 macht am meisten Sinn, weil es richtig Parameter zusammenfügt, die zusammen gehören.