Autor Beitrag
Talemantros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: So 01.06.14 14:55 
Hallo zusammen,
ich würde gern wie es der Titel sagt noch etwas zu Modellklassen fragen/wissen.
Leider lässt sich dies sehr schwer googlen und in meinen Büchern steht dazu rein gar nichts, was ich anwenden kann.

Bisher habe ich ja von euch beigebracht bekommen, wie sich Modellklassen selber validieren können um zu schauen, ob alle relevanten Daten gefüllt wurden

Beispiel
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
        public bool IsValid
        {
            get
            {
                return !string.IsNullOrWhiteSpace(Company) &
                    !string.IsNullOrWhiteSpace(Street) &
                    !string.IsNullOrWhiteSpace(City) &
                    Postale.HasValue;
            }
        }


Nun würde mich interessieren, ob es geht auch andere Prüfungen dort einzubauen, wie zum Beispiel, ob eine Telefonnummer nur aus Zahlen besteht oder ähnliches?!


Weiterhin habe ich bisher eine Modellklasse über Databinding immer nur an eine Text oder Combobox gebunden.

Wie würde man den vorgehen, wenn man andere Steuerelemente an die Modellklasse anbinden will.
Beispielsweise ein RadioButton, oder Listbox, DataGridView etc.

Müsste dann die Property mit List<> sein?

Kann mir da einer gute Links oder Infos zu kommen lassen?

Gruß
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 01.06.14 16:41 
Ja natürlich aber das wie entscheidet sich insbesondere daran wann die Prüfung erfolgen soll und ob sie immer erfolgen soll.

Das gezeigte Verfahren über die IsValid Methode hilft ja insbesondere beim allgemeinen Validieren von Objekten bevor es irgendeinem System zum persistieren/transportieren übergeben wird.
Die Signatur nur mit Boolrückgabe ist da insbesondere hilfreich weil das absolut generisch und simpel ist. Man kann jedes Objekt mit einer entsprechenden Methode ausstatten (am besten durch Implementierung eines entsprechenden Interface) und es wird immer gleich funktionieren ohne individuelle Details.

Wenn du mehr willst musst du dir überlegen was denn genau. Geht es dir nur um die Fehlermeldung? Die erste Fehlermeldung oder alle Fehlermeldungen? Oder willst du irgendeine Antwort von der Validierungsmethode damit du da gezielt darauf reagieren kannst? Aka es ist Property X gemeint darum muss im folgenden Vorgang Y ausgeführt werden? Dann wieder die Frage für einen Fehler oder für alle gleichzeitig? Dann auch wieder die Frage nach dem wann. Wenn du Einzelproperties prüfen willst und nicht die ganze Klasse soll die Property sofort geprüft werden beim setzen? Oder später zentral? Willst du die Prüfungen nur wenn die Daten aus deiner UI in den Klassen landen oder auch wenn sie woanders her kommen? Wenn die Klassen aus einer Datenquelle kommen möchte man ja eventuell explizit nicht das die geprüft wird oder anders geprüft wird.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: So 01.06.14 21:51 
Hallo Ralf,
vielen Dank für deine Antwort. Wie immer sehr ausführlich und irgendwie war mir klar, dass es für mich wieder Fragen aufwirft. :-)

Also ich würde die Daten denke ich nur prüfen wollen, wenn Sie aus der UI kommen.
Die Daten aus der Datenbank sollten ja vorher irgendwann mal geprüft wurden sein und somit korrekt.

Mein persönlicher Geschmack (ich hoffe das macht Sinn) wäre dass jede Property beim Eintragen durch den User sich prüft und eine Rückmeldung gibt.
Zentral beim Speichern wäre dann ja "überflüssig". Lasse mich aber auch gern eines besseren Stils belehren.

Ich hatte mir vorher nicht überlegt, dass die Properties auch Abhängigkeiten haben könnten, wie X macht was und Y reagiert.

Wärst du bereit mir Ansätze zu nennen für die von dir geschilderten Szenarien

1.) Implementierung eines Interface
2.) Wie man reagiert mit Y wenn X was meldet

Wenn ich die Frage zu den Fehlermeldungen richtig verstehe, also ob mich die erste oder alle interessiert. Denke ich, dass mich immer nur die erste interessiert.
Bei weiteren Eingaben kämen, dann ja die folgenden beim Verlassen beispielsweise eines jeden Textfeldes?!

VG

P.S.: Ich finde zu dem Thema mit den MOdellklassen etc. weniger Lektüre oder Tutorials!
Wenn jemand welche kennt würde ich mich auch freuen um mich weiter zu belesen.
Greenberet
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 339
Erhaltene Danke: 20

Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
BeitragVerfasst: So 01.06.14 22:08 
Hallo Talemantros,

ich würde für Punkt 2 zu DependencyProperties oder ähnliches greifen. Auf diese Weise kannst du bei Änderungen von Daten einfach reagieren.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 01.06.14 23:09 
Das ist ein WPF Ding. Auch wenn man DependencyProperties woanders bestimmt irgendwie einsetzen kann ist das wohl eher die Kategorie arbeiten gegen das System als mit ihm. In Winforms wohl eher nicht hilfreich.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mo 02.06.14 01:58 
Zitat:
P.S.: Ich finde zu dem Thema mit den MOdellklassen etc. weniger Lektüre oder Tutorials!
Wenn jemand welche kennt würde ich mich auch freuen um mich weiter zu belesen.


Das ganze Konzept ist ein Pattern.
Such mal MVC-Pattern, oder MVVM-Pattern (Ist eine Abwandlung vom MVC-Pattern), dann findest du auch Einiges.


Allgemein musst du aber wissen, dass ein solches Pattern nur ein (wie der Name schon sagt) Muster ist, keine feste Regel, die besagt, wie es gemacht werden muss.
Es wird nur ein Konzept beschrieben und das muss man verstehen, die tatsächliche Umsetzung unterscheidet sich dann zwischen den Anwendungsfällen.

Wann was wie genutzt werden sollte, hängt also immer vom konkreten Fall ab.
Es gibt viele Patterns, die tatsächliche Umsetzung in einer Software ist ein sehr umfangreiches Thema für sich und der Hauptbestandteil ist Erfahrung.


Such einfach mal nach Entwurfsmuster und klick dich durch. Du wirst irre viel finden, aber auch viel lernen. WIchtig dabei ist aber auch, dass du alles nicht nur kennst, sondern auch verstehst.

Schau dir auch mal das Thema Clean-Code an, Robert C. Martin ist ein Name, den sollte man in dem Zusammenhang mal gehört haben. Ein Kollege ist totaler Fan von ihm ^^


Ich lese auch manchmal den Tipp, einfach so drauf los zu programmieren. Irgendetwas ganz kleines. Und dann das ganze mit Unit-Tests ab decken. Und dann eine Erweiterung einbauen. Dann eine neue Oberfläche, eine andere Datenschicht, etc. Vor einem Jahr wäre ich schon beim ersten Schritt raus geflogen, weil einfach nur noch Chaos bei rum kommt.
Wenn du aber eine Anwendung hast, bei denen das alles ganz locker möglich ist, ohne etwas anpassen zu müssen, dann hast du mit großer Wahrscheinlichkeit viel richtig gemacht.

Dazu kannst du ja mal nach dem Open-Closed-Prinzip schauen. Offen für Erweiterungen, geschlossen für Änderungen.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mo 02.06.14 18:25 
Hi,
werde mich mal schlau lesen.
Mir ist sehr wichtig es nicht nur azukupfern, sondern zu verstehen.

Habe durch das Forum schon einige Schritte für mich nach vorn gemacht und hoffe auf noch mehr.
Mal sehen, ob ich einem meiner Bücher was finde, ansonsten muss das INet herhalten.

Sollte ich noch Detailfragen habe melde ich mich hier.

Gruß