Ceci est un exemple.Smalltalk - Comment éviter les typechecks dans cette situation?
Supposons que les contraintes suivantes:
- Une boutique ne peut avoir 5 produits.
- Un magasin d'alimentation peut seulement ajouter des produits alimentaires.
- Un magasin de vêtements ne peut ajouter que des vêtements.
- Un magasin mixte peut ajouter les deux produits.
Je les classes suivantes:
AbstractShop
- Foodshop
- ClothesShop
- MixedShop
AbstractProduct
- Vêtements
- alimentaire
fonctionnalité:
AbstractShop>>addProduct: aProduct
(products size < 5)
ifTrue:[^ products add:aProduct]
ifFalse:[ self error: 'A shop can only have five products' ]
FoodShop>>addProduct: aProduct
(aProduct isMemberOf: Food)
ifTrue:[^ super addProduct: aProduct]
ifFalse:[ self error: 'You can only add food products to a foodshop' ]
ClothesShop>>addProduct: aProduct
(aProduct isMemberOf: Clothing)
ifTrue:[^ super addProduct: aProduct]
ifFalse:[ self error: 'You can only add clothing products to a clothes shop' ]
"ClothesShop doesn't override the addProduct, because it can add them both."
Comment puis-je éviter de vérifier le type du produit, pour voir si elle peut être ajouté à la boutique? Je veux éviter cela, car c'est une mauvaise odeur. J'ai essayé de le découvrir avec Double Dispatch, mais cela semble rendre le code plus difficile à maintenir.
Mais le double dispatching est le moyen le plus propre. –
Deux livres qui montrent la façon de faire Smalltalk sont http://stephane.ducasse.free.fr/FreeBooks/BestSmalltalkPractices/Draft-Smalltalk%20Best%20Practice%20Patterns%20Kent%20Beck.pdf et http: // sdmeta. gforge.inria.fr/FreeBooks/SmalltalkDesignPatternCompanion/Ce sont les deux brouillons du livre final, le meilleur pour acheter le livre physique, mais ceux-ci sont le deuxième meilleur choix. –