Seite 1 von 1

if Abfrage vs Object Behavior

Verfasst: Montag 3. Dezember 2012, 18:03
von jbs
Wir sollen für ein Uniprojekt Carcassonne implementieren. Bei diesem Spiel gibt es Karten, die aneinander gelegt werden (Regeln). Es gibt unter anderem Klöster, die für jede anliegende Karte einen Punkt bringen (max. 9 Punkte).

Beim legen der Karte passiert unter anderem folgendes (Smalltalk):

Code: Alles auswählen

aCard abbey activateAt: aPoint on: self.
``aCard abbey activateAt...`` führt entweder eine Aktivierung durch (Registrierung auf Events beim Legen einer Karte), oder, wenn die Karte kein Kloster hat, ist die entsprechende Methode ein `noop`.

Meine Kommilitonen argumentieren, dass sie dies als unintuitiv empfinden und lieber folgendes sehen würden:

Code: Alles auswählen

aCard hasAbbey ifTrue: [ aCard abbey activateAt: ...]
Damit bin ich allerdings nicht einverstanden, da für mich die Verantwortung bei dem entsprechenden Abbey-Object liegt.

Mich würde interessieren, was eure Meinung dazu ist.

Re: if Abfrage vs Object Behavior

Verfasst: Montag 3. Dezember 2012, 18:12
von BlackJack
@jbs: Solche Fragen treten bei Spielen öfter auf. Sollen die Spielelemente die Regeln kennen, oder soll die ein etwas zentraleres Objekt kennen. Ist unter anderem auch die Frage ob, und wie Regeln ausgetauscht werden können.

Re: if Abfrage vs Object Behavior

Verfasst: Montag 3. Dezember 2012, 18:26
von jbs
Ja, nur möchte ich mich dem Vorwurf erwehren, meine Lösung sei nicht verständlich.

Re: if Abfrage vs Object Behavior

Verfasst: Montag 3. Dezember 2012, 19:04
von BlackJack
@jbs: Ich würde nicht unverständlich sagen, aber aus der zweiten Zeile wird einem Leser der keine Ahnung hat zumindest ersichtlich dass so eine Abtei optional ist. Bei der ersten Zeile könnte man auch denken jede Karte hat eine Abtei.

Re: if Abfrage vs Object Behavior

Verfasst: Montag 3. Dezember 2012, 19:12
von jbs
Vielleicht hilft auch einfach eine Umbenennung der Nachricht.

Code: Alles auswählen

aCard abbey activateIfPresentAt: ...
oder so