Glaubensfrage: KVO (1:n) oder "frickeln"?

  • Glaubensfrage: KVO (1:n) oder "frickeln"?

    Hallo,

    (Bezugnehmend auf: osxentwicklerforum.de/thread.php?threadid=5498)

    sorry, dass ich euch in letzter Zeit mit so vielen Problemen bzw. Fragen, wie man ein Problem am besten löst beschäftige. Aber mir ist es einfach wichtig meine Gedanken auf Richtigkeit/Praktikabilität zu überprüfen. Hier das nächste:

    Zwei Entitäten: Haus und Person. In einem Haus wohnen n Personen und eine Person wohnt in einem Haus - also eine klassische to-many Beziehung.

    Jede Person hat u.a eine Eigenschaft (Boolean): istBöse. Falls istBöse == YES, dann handelt es sich bei der Person um einen Verbrecher und die Polizei muss kommen. Das UI dazu sieht so aus:

    Eine Tabelle mit zwei Spalten: eine Spalte zeigt die Hausnummer/Straße der Häuser und die andere Spalte zeigt an, ob die Polizei kommen muss.

    Die Polizei muss kommen, falls eine Person in einem Haus böse ist. Mein Erster Gedanke war den Häusern einfach einen read-only Accessor zu verpassen "needsPolizei", der durch die Personen in dem Haus iteriert und überprüft ob alle Personen nicht böse sind. Das klappt auch ganz gut - Problem: wird eine Person böse, die schon in einem Haus ist bekommt mein Haus davon erstmal nichts mit - es muss zunächst wieder um ihre "needsPolizei" Eigenschaft befragt werden.

    Das Haus könne nun wieder eine to-many Beziehung observieren. Das wäre wohl die beste Lösung - nichwahr?

    "Einfachere" Lösung: Sobald eine Person böse wird informiert sie ihr Haus ganz explizit mit einem Methodenaufruf. Ich kann mich nicht zwischen "Observierung einer to-many Beziehung" und dem "Aufrufen einer Methode" entscheiden. Mein Hirn sagt, dass das Observieren einer to-many Eigenschaft aus folgenden Gründen die bessere Wahl wäre:

    * es bleibt schön gekapselt: eine Person muss nicht wissen, was sie zu tun hat, falls sie böse wird - in der Realität würde eine Person ja auch niemals auf die Idee kommen sich selbst zu belasten.

    * jetzt mag ein Methodenaufruf noch die einfachere Wahl sein, da die Eigenschaft "needsPolizei" nur von einer Eigenschaft der Personen abhängt. Aber falls später mehrere Abhängigkeiten dazukommen muss die Person an vielen vielen Stellen immer ihr haus informieren. Bei der Observierung einer to-many Beziehung kann ich ja dann einfach diese von der Observierung auf eine Eigenschaft auf mehrere ausweiten. Außerdem kann ich ja noch eine Person automatisch für all Ihre Eigenschaften ihre Observer informieren lassen.

    Für welche Lösung entscheidet man sich da am besten?

    Dangeeee :)
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • RE: Glaubensfrage: KVO (1:n) oder "frickeln"?

    Grundsätzlich reicht ein "Call-Back" aus. Du bist innerhalb des Models und da dürfen sich die Partner schon einmal kennen. Bedenke: Auch der Haus-Verweis ist letztlich properitär.

    Wenn Person ganz allgemein gehalten ist und bleiben soll, würde sich natürlich eine Observierung anbieten. Aber auch hier kann man über allgemeine Lösungen wie eine Delegate-Liste nachdenken.

    Womit wir bei einem Lösungsansatz sind, den du noch gar nicht bedacht hast: Die Person löst eine Notification aus.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Glaubensfrage: KVO (1:n) oder "frickeln"?

    Original von Tom9811
    Die Person löst eine Notification aus.


    Sie stellt ein Leuchtschild mit der Aufschrift 'Ich bin kriminell!' auf?
    Objekte sind manchmal echt seltsam. ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Neee, mit würfeln hat das nichts zu tun. Es sind verschiedene Ansätze, die sich in verschiedenen Szenarien anbieten. Generell: Abstraktion bedeutet Investitionskosten, die sich durch Wiederverwertung rentieren können. Also, ganz einfache Frage: Wird dann Haus eines Tages die Kriminalität der im Haus befindlichen Kakerlaken observieren müssen? Dann lohnt sich die Investition in die Abstraktion, weil du beim Programmmieren der Kakerlakenklasse nicht mehr an das Update für die Boshaftigkeit denken musst. Ist dies nicht der Fall, dann investiert du jetzt Abstraktion in etwas, was sich nie auszahlt. Das ist so wie ein angeschaffter Computer, den der Betrieb gar nicht benötigt. Wofür dann? (Okay, schicke PROGRMMINGSTYLEZ sind natürlich immer ein Argument.)

    Also: KVO ist teurer, aber abstrakter (weil typlos), "Callbacks" kostengünstiger, aber konkreter (weil typbehaftet). Was brauchst du in Zukunft? Lohnt sich der Hirnschmalz im KVO?

    Grobe Faustregel: Zwischen den Schichten lohnt sich fast immer Abstraktion, innerhalb der Schichten häufig nicht.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Das mit dem Würfeln war nich wirklich ernst gemeint. Ich habe mich zwischenzeitlich für den KVO Ansatz entschieden. Beim observieren normaler Collections, die nichts mit einem ArrayController zu tun haben (arrangedObjects lässt grüßen) ist eine Observierung von Collections ja nich so wild.
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • Das war mir schon klar. Na, wenn du es mit KVO implementiert hast, ist es doch jetzt schön abstrakt und wird dir dann hoffentlich in Zukunft noch schöne Dienste erweisen. Du scheinst ohnehin ja der Forschertyp zu sein und da ist es sicherlich nicht verkehrt, so etwas mal formuliert zu haben.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?