Disons que nous avons un site Web avec des produits. Nous avons une méthode qui Product::getProducts
renvoie un tableau de produits.
Puis un responsable est venu nous voir et nous a dit: nous voulons faire des promotions sur le site (remises, soldes). Les produits seront joints à chaque promotion. Nous avons écrit une méthodeAction::getProductsByActionId(actionId)
Ensuite, le responsable est revenu vers nous et nous a dit que nous avions besoin de plus d'articles auxquels les marchandises étaient attachées. Ajoutons une méthode Article::getProductsByArticleId(arcticleId)
.
Vous dites - faisons 1 méthode avec des paramètres. Ok, nous y arriverons.
Et puis attention: un responsable est venu vers nous et a dit - nous voulons pouvoir désactiver les produits sur le site. Ceux. il est nécessaire d'ajouter un indicateur actif pour les produits, qui a la valeur true / false. Les produits avec le faux drapeau ne doivent pas être affichés sur le site.
Bottom line: nous devons trouver tous les endroits dans le code qui obtiennent des produits et ajouter de la logique partout afin que seuls les produits avec l'indicateur active = true soient renvoyés. Ceux. 3 méthodes doivent être corrigées:
Product::getProducts,
Action::getProductsByActionId(actionId),
Article::getProductsByArticleId(arcticleId)
Le fait que nous devions corriger le code au mauvais endroit est une erreur frappante - à un certain endroit, ils ont oublié de le corriger.
Eh bien, faisons en sorte que nous n'ayons qu'un seul endroit pour obtenir des marchandises. Alors il n'y aura pas une telle erreur.
: , : Product::getProducts(actionId = null, articleId = null)
. , Product::getProducts
, articleId, Action::getProductsByActionId(actionId)
, ..
, , .. .
: . . , , Store::getProducts
— - , . - Product::getProducts
. ( , , - - ), - .
: : , active. . . 1 — Product::getProducts
active=true.
. — . 1 , — . . , Product::getProducts
-, active . 1 .
1 — , — . — -, - . . , — .
UPD:
, 1 : Product::getProducts, Product::getProductsV2, Product::getProducts , , , .
: , 1 private Product::getProducts. public , , .. - Product::getProductsForCatalog, - Product::getProductsForAction, : Product::getProductsForArticles, Product::getProductsForStore .. - 1 , 1 . 1 ( ), .