Frage

Am Anfang war das DAL-Objekt, das ist meine BO für info genannt und dann zu UI weitergegeben. Dann begann ich, reduziert Code in UI zu merken und es gab Controller-Klassen. Was ist die anständige recomendation.

ich derzeit Struktur Mine

Public Class OrderDAL

    Private _id Integer
    Private _order as Order

    Public Function GetOrder(id as Integer) as Order

        ...return Order

    End Function

End Class

dann habe ich Controller-Klassen (vor kurzem implementiert diese Art)

Public Class OrderController

    Private Shared _orderDAL as new OrderDAL

    Public Shared Function GetOrder(id) As Order

        Return _orderDAL.GetOrder(id)

    End Function

End Class

Dann in meiner Anwendung

My app Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        msgbox(OrderController.GetOrder(12345).Customer.Name)

    End Sub


End app

Ich fand ursprünglich, dass mit der freigegebenen Klasse I nicht eine neue Instanz der DAL zu halten habe zu schaffen, wenn ich Daten müssen holen

Dim _orderDAL as New OrderDal

_orderDAL.GetOrder(1234)

.....

Was ist Ihre Meinung?

Danke

War es hilfreich?

Lösung

Ich habe Ihre Lösung in der Vergangenheit verwendet, und das einzige Problem, das ich konfrontiert ist, dass „Shared“ oder „statisch“ Methoden nicht unterstützen Vererbung. Wenn Ihre Anwendung wächst, können Sie sehr gut brauchen, um verschiedene Arten von „OrderControllers“ zu unterstützen.

Die estabilished Art und Weise unterschiedlichen OrderControllers der Unterstützung wäre in der Theorie, eine Fabrik zu erstellen:

OrderControllerFactory.ConfiguredOrderController().GetOrder(42);

Das Problem hierbei ist: welche Art zurückgegeben wird durch "ConfiguredOrderController ()"? Da es sich um die statische „GetOrder (int id)“ Methode haben muss - und statische Methoden sind nicht durch Vererbung oder Schnittstellen unterstützt. Die Art und Weise, um dies ist nicht statische Methoden in der OrderController Klasse zu verwenden.

public interface IOrderController
{
    Order GetOrder(int Id)
}

public class OrderController: IOrderController
{
    public Order GetOrder(int Id)
    {}
}

und

public class OrderControllerFactory()
{
    public IOrderController ConfiguredOrderController()
    {}
}

Daher werden Sie wahrscheinlich besser dran, durch die Verwendung nicht-statische Methoden für die Steuerung.

Andere Tipps

Ich denke, es gibt mehrere Alternativen in diesem ausgezeichneten Buch aufgeführt: Patterns of Enterprise Application Architecture . Einige Muster, die für Sie von Interesse sein können:

Nun Ihre Anwendung sollte nicht separate Versionen der Daten werden Instanziieren acces Schicht, so dass man unter Kontrolle, dass haben. Der Pseudo-Code Sie auf dem Laufenden ist wirklich schwer allerdings zu lesen.

Die Frage ist, was Ihre Datenzugriffsschicht ist, und wie viel ist es? Das wird ein gutes Stück diktieren, was Sie tun. Wenn Ihr persiting in eine Datei dann denke ich, was Sie geschrieben haben, ist in Ordnung, und wenn man es mit anderen Controllern in Ihrem System austauschen müssen, dann ist es möglich, die Artikel in einem Singelton (Schauder) zu wickeln.

Wenn Sie wirklich Auftragsbearbeitung tun und zurück in eine Datenbank persistierenden, ich denke personaly es Zeit ist, zu einem ORM zu suchen. Diese Pakete werden die CRUM Aspekte für Sie erledigen und die Anzahl der Elemente reduzieren, die Sie haben zu halten.

My $ .02, und ich behalte mir das Recht vor, meine Antwort zu überarbeiten, sobald ich ein besseres Beispiel zu sehen.

Ich kann nicht auf die VB Details sprechen, weil ich keinen VB-Entwickler bin, aber:

Was Sie tun, ist eine gut etablierte gute Praxis, die GUI / Präsentationsschicht aus der Datenschicht zu trennen. Einschließlich realen Anwendungscode in GUI Ereignismethoden ist eine (leider auch gut etablierte) schlechte Praxis.

Ihre Controller-Klasse ähnelt die Brückenmuster rel="nofollow die ist auch eine gute Idee, wenn beide Schichten werden Lage sein, ihre Form zu ändern, ohne die andere darüber wissen.

Gehen Sie weiter!

Es ist eine gute Praxis - vor allem, wenn Sie zu einem Punkt, wo der Controller benötigt mehr als eine einfache Übertragung auf das darunter liegende DAL zu tun.

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