triviale getter und setter?



  • Hallo zusammen,

    ich möchte mal von den Erfahrenen unter euch gerne wissen, ob ihr überall getter/setter verwendet?

    Ich habe eine Klasse (reine Datenstruktur), die verschiedene Daten/Parameter speichert. Das Setzen der Membervariablen erfolgt dort ohne jegliche Prüfung auf Richtigkeit. Ich könnte also die Membervariablen public machen und direkt darauf zugreifen.

    Vorteil:

    • deutliche Vereinfachung der Klasse, da ich keine Funktionen (setter/getter) implementieren muss

    Nachteil:

    • Die Einheitlichkeit wird gemindert, wenn bei einigen Klassen der Zugriff über getter/setter erfolgt und woanders direkt.

    ....und wie macht man das bei Klassen, wo einige Membervariablen eine Prüfung benötigen, weshalb Setter sinnvoll wären? Dann wieder überall setter/getter in der Klasse oder nur da wo es gebraucht wird und der rest public Membervariablen?

    Wie macht ihr es?

    LG
    SBond



  • Also bei mir ist es so, dass sich die "getter/setter"-Frage selten stellt, weil ich praktisch nie einfach nur was setzen will. Meist erfüllt eine Klasse irgendeine Aufgabe und in dem Kontext werden dann die neuen Werte gesetzt.

    Was ich nicht mache

    class KursStorage
    {
        public:
            inline void setValue1( double value ) { Value1 = value; }
    }
    

    Sondern ich verlagere Wissen/Login in die Klasse hinein:

    class KursStorage
    {
        public:
            void update( const KursUpdateMessage & );
    }
    

    Und dadurch stellt sich die Frage nach einem setter nicht.



  • @SBond Hier lesen: https://www.martinfowler.com/bliki/AnemicDomainModel.html
    Ich bin i.A. kein besonderer Fowler Fan, aber wo er Recht hat hat er nunmal Recht 🙂



  • danke für die Antworten. Ja auf den Artikel bin ich beim Stöbern auch schon gestoßen 🙂

    ...gerade solche Designentscheidungen fallen mir immer wieder schwer, da es oft Befürworter und Gegner gibt und man selber mangels Erfahrung in der Mitte steht und sich nicht so recht entscheiden kann 😃



  • @SBond sagte in triviale getter und setter?:

    Ja auf den Artikel bin ich beim Stöbern auch schon gestoßen

    tl;dr?



  • Also ein Vorteil des Anemic Domain Models ist dass man das Zeug automatisch durch Tools erzeugen lassen kann. Also man klopft sein Datenbank-Schema irgendwo in ein XML-File o.ä. rein und lässt sich die C++/C#/Java/... Klassen dann von einem Tool erzeugen. Plus fancy ORM Code zum Laden/Speichern von lustigen Objekt-Graphen aus/in einer DB.
    (Und überall wo ich jetzt DB schreibe kann es natürlich auch was anderes sein, es geht im Prinzip nur darum dass das Zeug zwischen zwei programmläufen irgendwo persistiert wird.)

    Die Nachteile sind in dem Artikel von Fowler schön beschrieben.

    Ein Nachteil eines Rich Domain Model kann dagegen sein dass man die Objekte u.U. gar nicht mehr erzeugen kann wenn die Daten irgendwie korrupt geworden sind. Also zumindest nicht wenn man im Ctor die Daten validiert. Das kann dann auch passieren wenn man mal die Regeln ändert, dabei die Daten in der DB aber nicht anpasst. Wie man damit in grossen Enterprisigen Anwendungen umgeht ... keine Ahnung. Das musst du wen fragen der mehr Enterprisiges Zeug macht als ich 🙂

    So lange man aber nicht mit persistierten Objekten arbeitet und/oder man damit leben kann dass einem das Programm bei invaliden Daten u.U. um die Ohren fliegt finde ich ein Rich Domain Model viel besser.



  • @hustbaer sagte in triviale getter und setter?:

    Das musst du wen fragen der mehr Enterprisiges Zeug macht als ich

    NP. Ich geh' Scotty fragen.

    OT: Besteht die Gefahr, daß Du Dich auch mal auf den Discord verirrst?



  • @Swordfish sagte in triviale getter und setter?:

    OT: Besteht die Gefahr, daß Du Dich auch mal auf den Discord verirrst?

    Durchaus. Aber aktuell is von der Zeit her bissi knäpplich und ich bin bissi kränklich => viel Video Gucken und wenig sonst machen 🙂



  • @hustbaer Ich hoffe, Du lässt Dir von $bezugsperson lecker Hühnersüppschen (Horst-Lichter-Aussprache dazudenken) kochen. Dat hilft wirklich!



  • @hustbaer sagte in triviale getter und setter?:

    Hier lesen: https://www.martinfowler.com/bliki/AnemicDomainModel.html

    Toll, jetzt hatte ich einen Bluescreen.



  • @Swordfish Ich trink lieber Tee mit Honig. Das hilft auch ganz gut. Andrerseits Hünersuppe klingt auch net verkehrt. Kann ja beides machen. 🙂



  • @Mechanics Ich spendier' Dir zum Geburtstag gelbe Klarsichtfolie. Dann kannst wahlweise einen Cyanscreen haben.


Log in to reply