Laden...

Wie kann ich das Drei-Schichten-Modell auf meine Applikation anwenden?

Erstellt von Frokuss vor 4 Jahren Letzter Beitrag vor 4 Jahren 982 Views
F
Frokuss Themenstarter:in
158 Beiträge seit 2015
vor 4 Jahren
Wie kann ich das Drei-Schichten-Modell auf meine Applikation anwenden?

Moin Leute, hatte vor ein paar Tagen mal was geschrieben und das ganze ist dann auf das 3-Schichten-Modell hinausgelaufen - aber die Grundfrage war in dem Thread halt eine andere, weshalb ich einen neuen Thread aufmachen... Falls das doof ist - könnt ihr den ja hier einfach schließen und im anderen Thread antworten. Und zwar dieser: Vererbung gleicher Methoden

Also:
Nehmen wir an, ich möchte eine Netzwerkanwendung schreiben - von mir aus sowas wie WhatsApp, die mit nem Trayicon unten in der Leiste ist und mehrere verschiedene Fenster aufrufen kann... Wie bekomme ich das Schichten-Modell dadrunter?

Ich meine, das Schichten-Modell besagt doch, das quasi alles von der UI aus los geht O.o Aber bei einer Netzwerkanwendung brauche ich doch auch irgendwie einen Impuls von außen - sprich z.B. die Nachricht von einem Kontakt.

Sprich, habe ich dann nicht einen Thread offen, der quasi meine Datenzugriffsschicht representiert? Und diese triggert dann doch meine UI? Das wäre dann doch ein bruch, oder?

Und dann hätte ich da noch eine weitere Frage... Wie genau trenne ich die Logik von der UI-Schicht? Reicht es aus, wenn ich meine UI-Klasse in partialklassen trenne? Oder erstelle ich dafür eine seperate Klasse für jedes Fenster... oder erstelle ich eine große Logik-Klasse die Fenster-Übergreifend ist und hoffe, dass ich Synergieeffekte habe?

Und noch eine letzte Frage 😄
Folgend eine Event-Methode die zwei Wörterbücher durchläuft und bei denen die Breite anpasst. Dabei handelt es sich um direkte "Kinder-Knoten". Was hiervon wäre nun UI-Schicht und was genau wäre Logikschicht?

		public Dictionary<string, Liste> objChildsL = new Dictionary<string, Liste>();//"Panel"
		public OrderedDictionary objChildsLE = new OrderedDictionary();//Test für ListenElemente (Label)

		private void Evt_Resize(object sender, EventArgs evt){
			foreach(KeyValuePair<string, Liste> l in objChildsL){
				l.Value.Width = Width - Styles.ListElementEinruecken;
			}
			
			foreach(KeyValuePair<string, ListenElement> kvp in objChildsLE){
				kvp.Value.Width = Width - Styles.ListElementEinruecken;
			}
		}

Liebe Grüße Frokuss

16.806 Beiträge seit 2008
vor 4 Jahren

Ich meine, das Schichten-Modell besagt doch, das quasi alles von der UI aus los geht O.o

Nein, eine UI ist keine Pflicht in einem Mehrschichtenmodell, kann aber Bestandteil dessen sein.

Sprich, habe ich dann nicht einen Thread offen, der quasi meine Datenzugriffsschicht representiert?

Ein Thread ist ein Runtimefeature, was kein Bestandteil in einer Architektur ist.
Eine Architektur deckt aber keine implizieten Implementierungsfeatures wie Threads ab.

Und diese triggert dann doch meine UI?

Im Prinzip hört Deine UI auf ein Event, das die die darunterliegende Schicht zur Verfügung stellt.
Das ist kein Bruch; die darunterliegende Schicht kennt schließlich den Eventkonsument nicht technologisch.

Reicht es aus, wenn ich meine UI-Klasse in partialklassen trenne?

Nein. Partial ist ein Sprachfeature, was ebenfalls nicht Teil einer Architektur ist.

Eine Trennung findet im Prinzip physikalisch statt; in .NET i.d.R. basierend auf Namespaces - kann aber auch ganz in getrennten Projekten sein.
Kommt individuell drauf an.

d was genau wäre Logikschicht?

Darstellung => UI

F
Frokuss Themenstarter:in
158 Beiträge seit 2015
vor 4 Jahren

Okay... also wäre das Code-Ausschnitt in der UI einzuordnen - da es was mit der Darstellung zu tun hat. Danke. Dann hoffe ich, dass ich das mal so langsam auf die Kette bekomme 😄

Lieben Gruß Frokuss

16.806 Beiträge seit 2008
vor 4 Jahren

Stell Dir einfach immer wieder die Frage: wäre es ein sehr großer Aufwand, wenn mein Chef nun statt X einfach Y haben will?
Das klappt super in der Modularisierung von Storage (Datenbank, Dateien...) und auch in der UI.

Wenn Du die Modularisierung gut gemacht hast, dann hast Du so wenig wie möglich Aufwand, weil Du von MySQL auf MSSQL wechseln musst - oder Deine Logik sowohl von einer Konsolenanwendung, einer Webanwendung oder einer Desktop-Anwendung angesprochen werden kann.

Bei der Datenbank bekommt man dank ADO.NET zumindest in der .NET Welt schon viel geschenkt; man muss es nur korrekt anwenden.