Frage

Ich erinnere mich zurück, wenn MS ein Forum Beispielanwendung freigegeben, das Design der Anwendung wie diese war:

/Classes/User.cs /Classes/Post.cs ... /Users.cs /Posts.cs

So ist die Klassen-Ordner hatten nur die Klasse d Eigenschaften und Getter / Setter. Die Users.cs, Post.cs usw. haben die eigentlichen Methoden, die die Data Access Layer zugreifen, so Posts.cs könnte wie folgt aussehen:

public class Posts
{
    public static Post GetPostByID(int postID)
    {
          SqlDataProvider dp = new SqlDataProvider();
          return dp.GetPostByID(postID);
    }
}

Ein weiterer eher traditioneller Weg alle Methoden in Posts.cs in die Klassendefinition wäre auch zu setzen (Post.cs).

Splitting Dinge in zwei Dateien macht es viel mehr Verfahrens nicht? Ist das nicht OOP Regeln zu brechen, da sie das Verhalten aus der Klasse zu nehmen und sie in einer anderen Klassendefinition setzen?

War es hilfreich?

Lösung

Wenn jede Methode ist nur ein statischer Aufruf direkt an die Datenquelle, dann ist die „Beiträge“ Klasse ist wirklich eine Fabrik. Man könnte sicherlich die statischen Methoden in „Beiträge“ in die „Post“ Klasse setzen (dies ist, wie CSLA funktioniert), aber sie sind immer noch Fabrikmethoden.

Ich würde sagen, dass ein moderneres und genaue Namen für die „Beiträge“ Klasse seien „Postfactory“ (unter der Annahme, dass alle es statische Methoden hat, sind).

Ich glaube, ich würde nicht sagen, dass dies einen „prozedurale“ Ansatz ist notwendig - es ist nur eine irreführende Bezeichnung, würden Sie in der modernen OO Welt gehen davon aus, dass ein „Beiträge“ Objekt wäre Stateful und Methoden zur Verfügung stellen zu manipulieren und verwalten eine Reihe von "Post" Objekten.

Andere Tipps

Nun, es hängt davon, wo und wie Sie Ihre Trennung von Bedenken definieren. Wenn Sie den Code setzen Sie den Beitrag in der Post Klasse zu füllen, dann wird Ihr Business Layer mit Data Access-Code interveniert, und umgekehrt.

Für mich macht es Sinn, die Daten-Abruf und bevölkern außerhalb des eigentlichen Domain-Objekt zu tun, und lassen Sie die Domain-Objekt für die Verwendung der Daten verantwortlich.

Sind Sie sicher, dass die Klassen sind nicht Teil-Klassen. In diesem Fall sind sie wirklich nicht zwei Klassen, nur eine einzige Klasse verteilt auf mehrere Dateien für eine bessere Lesbarkeit.

Basierend auf Ihrem Code-Schnipsel, Beiträge ist in erster Linie eine Klasse von statischen Hilfsmethoden. Beiträge ist nicht das gleiche Objekt wie Post . Statt Beiträge , könnte ein besserer Name PostManager oder PostHelper sein. Wenn Sie es auf diese Weise denken, kann es helfen, zu verstehen, warum brach sie es darauf hin, dass Art und Weise.

Dies ist auch ein wichtiger Schritt für eine Entkopplung (oder lose Kopplung) Sie Anwendungen.

Was ist anti-OOP oder pro-OOP ganz auf die Funktionalität der Software abhängig ist und was nötig ist, damit es funktioniert.

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