Hallo, heute mal eine Stil-Frage, bzw. ein Best Practise:
Ich habe eine Client-Server-Anwendung.
Derzeit arbeite ich am Client, bzw. plane diesen genauer (Code, was ist notwendig, wie wird die Architektur des Clients aussehen usw. usw.).
Logik und GUI werde ich strikt trennen.
Ich habe die Anwendung im SysTray laufen, nur wenn nötig, ist eine Form sichtbar, mit welcher gewisse Einstellungen getätigt werden können.
Die Inhalt der Form ist interaktiv, der Nutzer klickt irgendetwas, daraufhin wird das Business "angesprochen" und anhand der Rückgabe-Werte passen sich entsprechend die Felder an.
Der SysTray dient zum einen der Steuerung (beschränkt => Konfigurieren - Form wird gerufen; Anmelden / Abmelden - Logik wird ausgeführt etc. etc.).
Der SysTray zeigt aber auch (bspw. Anhand des Icons) gewisse Stati der Anwendung an (Server erreichbar, Service eingeschränkt / voll Nutzbar, bin ich angemeldet (man kann auch Server-Seitig abgemeldet werden) und so weiter).
Diese Punkte entscheidet die Logik mittels CallBack-Funktionen vom Service aus oder eine Intervall-mäßige Prüfung bestimmter Punkte.
Ich finde es nicht so gut, wenn ich alle x Sekunden / Millisekunden den SysTray (also die Klasse die diesen darstellt) fragen lasse, wie es bei den entsprechenden Properties im Business aussieht. Ich möchte ihn weitestgehend stateless halten, lediglich die im Business gehaltenen States darstellen (Texte, verfügbare Funktionen).
Dazu habe ich mir gedacht, könnte ich doch einfach eine entsprechende Klasse "beobachten", welche bspw. meine Properties hält (die relevanten) oder die Business-Klasse selbst.
So erspare ich mir hier entsprechende Timer, die ständig laufen müssen, und fange einfach ein OnPropertyChanged-Event der jeweiligen Business-Klasse ab.
So weiß der SysTray, wann er einen Text ändern muss, eine Funktion ein / ausblenden muss, das Icon ändern muss... die Dinge eben.
Was ich nicht will, ist, dass die GUI die Logik anspricht (sage mir dies, berechne das), und umgekehrt die Logik dann die GUI anspricht (Zeige die Funktion, zeige jenen Icon), denn dann hätte ich vom einen auf den anderen einen Verweis und umgekehrt. Die Logik soll die GUI nicht kennen, im Nachhinein habe ich dadurch Wartungsarbeit gespart.
Nun die Frage, ist der Weg mit OnPropertyChanged-Events ein guter Weg oder habt ihr ganz andere Ansätze? Wie würdet ihr das regeln?
Naja, würde mich über jede Art von Rückmeldung freuen... lg. Kagu
(Ich hänge gleich noch eine Skizze an!)
Ich habe eine Client-Server-Anwendung.
Derzeit arbeite ich am Client, bzw. plane diesen genauer (Code, was ist notwendig, wie wird die Architektur des Clients aussehen usw. usw.).
Logik und GUI werde ich strikt trennen.
Ich habe die Anwendung im SysTray laufen, nur wenn nötig, ist eine Form sichtbar, mit welcher gewisse Einstellungen getätigt werden können.
Die Inhalt der Form ist interaktiv, der Nutzer klickt irgendetwas, daraufhin wird das Business "angesprochen" und anhand der Rückgabe-Werte passen sich entsprechend die Felder an.
Der SysTray dient zum einen der Steuerung (beschränkt => Konfigurieren - Form wird gerufen; Anmelden / Abmelden - Logik wird ausgeführt etc. etc.).
Der SysTray zeigt aber auch (bspw. Anhand des Icons) gewisse Stati der Anwendung an (Server erreichbar, Service eingeschränkt / voll Nutzbar, bin ich angemeldet (man kann auch Server-Seitig abgemeldet werden) und so weiter).
Diese Punkte entscheidet die Logik mittels CallBack-Funktionen vom Service aus oder eine Intervall-mäßige Prüfung bestimmter Punkte.
Ich finde es nicht so gut, wenn ich alle x Sekunden / Millisekunden den SysTray (also die Klasse die diesen darstellt) fragen lasse, wie es bei den entsprechenden Properties im Business aussieht. Ich möchte ihn weitestgehend stateless halten, lediglich die im Business gehaltenen States darstellen (Texte, verfügbare Funktionen).
Dazu habe ich mir gedacht, könnte ich doch einfach eine entsprechende Klasse "beobachten", welche bspw. meine Properties hält (die relevanten) oder die Business-Klasse selbst.
So erspare ich mir hier entsprechende Timer, die ständig laufen müssen, und fange einfach ein OnPropertyChanged-Event der jeweiligen Business-Klasse ab.
So weiß der SysTray, wann er einen Text ändern muss, eine Funktion ein / ausblenden muss, das Icon ändern muss... die Dinge eben.
Was ich nicht will, ist, dass die GUI die Logik anspricht (sage mir dies, berechne das), und umgekehrt die Logik dann die GUI anspricht (Zeige die Funktion, zeige jenen Icon), denn dann hätte ich vom einen auf den anderen einen Verweis und umgekehrt. Die Logik soll die GUI nicht kennen, im Nachhinein habe ich dadurch Wartungsarbeit gespart.
Nun die Frage, ist der Weg mit OnPropertyChanged-Events ein guter Weg oder habt ihr ganz andere Ansätze? Wie würdet ihr das regeln?
Naja, würde mich über jede Art von Rückmeldung freuen... lg. Kagu
(Ich hänge gleich noch eine Skizze an!)