2016-08-05 4 views
0

abhängt Ich habe 2 Klassen jeder hat seine eigene Methode.Best Practice wo Put-Methode, die auf 2 verschiedene Objekte

Ich muss eine Berechnung machen, wo ich den Wert dieser 2 Methoden brauche.

In einigen anderen Klassen brauche ich den Wert dieser Berechnung.

Wo stelle ich diese Methode, die die Eingabe von 2 verschiedenen Objekten benötigt und in mehreren anderen Klassen benötigt wird?

Ein vereinfachtes Beispiel:

public class One 
{ 
    public double item1 {get;set;} 
    public double item2 {get;set;} 

    public double MethodClassOne() 
    { 
    return 
      item1 * item2; 

    } 
    } 

public class Two 
{ 
    public double item1 {get;set;} 
    public double item2 {get;set;} 

    public double MethodClassTwo() 
    { 
    return 
      item1 * item2; 

    } 
    } 

public class C 
{ 
    public double item1 {get;set;} 
    public double item2 {get;set;} 
    public double item3 {get; private set;} 

    public C(One one, Two two) 
    { 

    this.item3 = MethodClassOneAndTwo(one, two); 

    } 
    public double MethodClassC() 
    { 
    return 
      item1 + item2 + item3; 

    } 
    } 
Where do I put this method??? 
    MethodClassOneAndTwo(One one, Two two) 
    { 
     One.MethodOne() + two.MethodTwo(); 

    } 
+1

Was versuchen Sie zu erreichen BTW? In einfachen Worten, auch wenn es nur zum Lernen ist. –

+0

Ich mache eine App. um industrielle Transformatoren zu berechnen. Es gibt einen Kern und eine Beute. Durch Berechnungen mit Eigenschaften des Kerns und des Abraums kann ich eine Oberflächentemperatur finden, diese Temperatur ist etwas, das ich in einigen anderen Berechnungen benötige. –

+0

Okay gut zu wissen. Du könntest das alles in einer Klasse haben, aber ich habe mein "Industrial Transformers for Dummies" Handbuch verlegt, also musst du deine Frage bearbeiten, um die Klassen und Methoden umzubenennen, so dass es für mich einfach ist zu wissen, wie du es willst Betreibe jeden Teil der Daten. –

Antwort

2

Dies könnte eine gute Idee sein; in einer neuen Klasse, die beiden ehemaligen Klassen verweisen:

public class Three { 
    public One One { get; set; } 
    public Two Two { get; set; } 

    public class Three(One one, Two two) { 
     this.One = one; 
     this.Two = two; 
    } 

    public double MethodClassForOne() { 
     return (One.item1 * One.item2); 
    } 

    public double MethodClassForTwo() { 
     return (Two.item1 * Two.item2); 
    } 

    public double MethodClassOneAndTwo() 
    { 
     return (MethodClassForOne() * MethodClassForTwo()); 
    } 
} 

EDIT: Ist gerade wegen einer Benachrichtigung, und ich bemerkte in Ihrer C Klasse Sie item3 { get; private set; } haben, aber es kann nicht vom Konstruktor festgelegt werden ... Wie wird item3 jemals eingestellt?

+0

Ich zweite das .. –

+0

Ich dachte daran, dies zu tun, aber ich weiß nicht, ob dies eine gute Übung ist, 2 Klassen in einem drei zu kombinieren, nur um 1 Methode zurück zu bekommen –

+0

@FrederikDeClercq Wenn ich 100% ehrlich sein kann, ich don Ich glaube nicht, dass der von Ihnen geschriebene Code eine gute Übung ist. Die Klassennamen sind ein Durcheinander, das Aufteilen von Methoden in mehrere Klassen ist völlig merkwürdig, und warum Sie nicht wollen, dass diese Methode Teil einer dieser anderen Klassen ist, ist mir ein Rätsel. Dies ist die beste Lösung, die ich mir vorstellen kann, ohne Informationen darüber zu geben, was Sie wirklich mit diesem Code erreichen wollen. –

0

Es ist wirklich alles auf Ihrem Design abhängt, die zur Zeit ein bisschen vage, aber ich würde sagen, wenn Sie es in der Klasse C benötigen, dann legen Sie die Methode in Klasse C.

Achten Sie wieder auf die Designdetails. Eine Klasse sollte nur einen Grund haben, sich zu ändern (d. H. Der "Single Responsibility Principal"). Also, wenn das nicht wirklich ist, was Klasse C ist, dann lege es in eine "Klasse C Hilfsklasse" irgendeiner Art.

+0

Ich brauche es in mehreren Klassen, also kann ich es nicht in Klasse C setzen –

+0

Ich kann wirklich Ihre Frage darüber hinaus ohne weitere konkrete Details nicht beantworten. Wenn Sie die Klassen "Eins", "Zwei" und "C" aufrufen und keine weiteren Informationen darüber zur Verfügung stellen, was Ihr Entwurf tatsächlich macht, ist dies zu vage für eine gute Antwort. –