Lösen Programmierer widersprüchliche Probleme (Codearchitektur)

Nehmen wir an, wir haben eine Website mit Produkten. Wir haben eine Methode, Product::getProducts



die eine Reihe von Produkten zurückgibt.





Dann kam ein Manager zu uns und sagte: Wir wollen auf der Website Werbung machen (Rabatte, Verkäufe). Produkte werden jeder Aktion beigefügt. Wir haben eine Methode geschriebenAction::getProductsByActionId(actionId)







Dann kam der Manager wieder zu uns und sagte, wir bräuchten mehr Artikel, an denen die Waren befestigt waren. Fügen wir eine Methode hinzu Article::getProductsByArticleId(arcticleId)



.





Sie sagen - lassen Sie uns 1 Methode mit Parametern machen. Ok, wir werden dazu kommen.





Und hier Aufmerksamkeit: Manager kam zu uns und sagte - wir möchten Produkte auf der Website deaktivieren können. Jene. Für Produkte muss ein aktives Flag hinzugefügt werden, das den Wert true / false hat. Produkte mit der falschen Flagge sollten nicht auf der Website angezeigt werden.





Fazit: Wir müssen alle Stellen im Code finden, an denen Produkte abgerufen werden, und überall Logik hinzufügen, damit nur Produkte mit dem Flag active = true zurückgegeben werden. Jene. 3 Methoden müssen korrigiert werden:



Product::getProducts,







Action::getProductsByActionId(actionId),







Article::getProductsByArticleId(arcticleId)







Die Tatsache, dass wir den Code an der falschen Stelle reparieren müssen, ist ein auffälliger Fehler - an einigen Stellen haben sie vergessen, ihn zu reparieren.





Machen wir es so, dass wir nur einen Ort haben, an dem wir Waren bekommen können. Dann wird es keinen solchen Fehler geben.





: , : 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 ( ), .








All Articles