Frage

Speaking in Bezug auf objektorientiertes Design, denken Sie, eine Funktionalität zu geben retten sich in Datenbasis zu einem Objekt verdirbt den Zusammenhalt der Klasse?

Stellen Sie sich vor:

Product p = new Product() 
          {
           Name = "Joy Rider", 
           Price = 100, 
           Currency = "USD"
          };

Glauben Sie, dass dieses Produkt p sparen auf DataBase besser ist auf diese Weise getan werden:

 p.Save();

oder in einer Art und Weise so etwas wie folgt aus:

 ProductServices.SaveProduct(p);

Was denken Sie?

War es hilfreich?

Lösung

Es ist mit dem einzigen Verantwortung Prinzip stören. Der Zweck der Produktklasse in Ihrem Beispiel ist ein Produkt und die Operationen auf diesem Produkt darzustellen. mit der Datenbank Interacting ist die Klasse Verantwortung kein Kernteil.

die ProductServices Klasse erhöht das Wartbarkeit des Codes. Nehmen wir an, die Logik für das Speichern von Objekten in der Datenbank war zu ändern (was es kann) haben Sie jede Entity-Klasse in Ihrem System ändern?

Andere Tipps

Ein Objekt, das sich in der Datenbank speichern kann, würde SRP (Single Verantwortung Prinzip) verstoßen.

Persistence ist eine Verantwortung, ganz von selbst und soll durch spezielle Klassen behandelt werden.

Diese zusätzlich wäre geringe Kohäsion zu haben -. Die Mitglieder, die zu tun haben mit Ausdauer in kein Verhältnis zu denen haben, die dies nicht tun und würde in den Methoden der Klasse nicht verwendet werden, die mit Beharrlichkeit nicht umgehen

In Bezug auf dem Object Oriented Design nur dann nicht es ist nichts falsch mit der Save-Methode Teil von Produkt sein . Es wäre eigentlich die bevorzugte Methode in der objektorientierten Design-Welt sein. Und von einer reinen OO Perspektive würden Sie nicht wollen, dass es auseinander gebrochen, weil die funktioneller ist als Objekt.

Wenn Sie jedoch in der Abhängigkeit Inversion Prinzip glauben, welche Module hohe sagt soll nicht auf niedrigem Niveau Module abhängen; dann wäre eine Save-Methode geeignet sein, aber es sollte eine abstrakte Anschlussart als Parameter. Dies würden Sie ein schönes Objektmodell, das eine Save-Methode enthält, aber es wäre keine Kenntnis von der Art der Verbindung hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top