Comment adhéreriez-vous au principe "Dites, ne demandez pas" (dorénavant "le principe") dans le scénario simple suivant? Dans un jeu de Tetris, je conseil, des cours BlockGrid et assemblez pertinentes à l'exemple suivant:Comment penser "Dites, ne demandez pas" dans cet exemple simple?
public class Board
{
private var fallingPiece:Piece;
private var blockGrid:BlockGrid;
...
public function moveFallingPiece(xDirection:int, yDirection:int):void
{
blockGrid.movePiece(fallingPiece, xDirection, yDirection);
}
}
Une fois fallingPiece est placé dans la rangée du bas de BlockGrid, il ne devrait plus être le « fallingPiece ». Ai-je raison de ne pas violer le principe de ce qui suit?
if(blockGrid.getPiecePosition(piece).y == 0)
{
fallingPiece = null;
}
Mais est-ce vraiment différent de cela, ce qui à mon avis enfreint clairement le principe? Je ne suppose pas que j'ai conçu ces relations de classe de la manière appropriée pour travailler avec le principe. S'il vous plaît des conseils sur un autre design si c'est ce qui me manque.
EDIT, Solution proposée:
je suis allé avec les réponses proposant "des commentaires de commande" par les événements. Le conseil indique à BlockGrid de déplacer une pièce. La méthode movePiece de BlockGrid distribue les événements MOVED_TO ou MOVE_FAILED en fonction du résultat, que Board peut écouter et utiliser pour déterminer si une pièce a cessé de tomber. N'hésitez pas à nous faire part de vos commentaires sur cette solution.
public class Board
{
...
public function Board()
{
...
blockGrid.addEventListener(PieceMoveEvent.MOVE_FAILED, onPieceMoveFailed);
...
}
public function moveFallingPiece(xDirection:int, yDirection:int):void
{
blockGrid.movePiece(fallingPiece, xDirection, yDirection);
}
public function onPieceMoveFailed(event:MovePieceEvent):void
{
if(event.instance == currentlyFallingPiece && event.fromPosition.y != event.toPosition.y)
{
currentlyFallingPiece = null;
}
}
Comment ne pas demander ne dites pas au travail? –
Voici une bonne référence pour "dire, ne demandez pas": http://www.pragprog.com/articles/tell-dont-ask – Dolph