¿Los programadores están resolviendo problemas conflictivos (arquitectura de código)?

Digamos que tenemos un sitio web con productos. Tenemos un método que Product::getProducts



devuelve una variedad de productos.





Entonces se nos acercó un gerente y nos dijo: queremos hacer promociones en el sitio (descuentos, rebajas). Los productos se adjuntarán a cada promoción. Escribimos un métodoAction::getProductsByActionId(actionId)







Luego, el gerente se acercó a nosotros nuevamente y nos dijo que necesitábamos más artículos a los que se adjuntaran los productos. Agreguemos un método Article::getProductsByArticleId(arcticleId)



.





Usted dice: hagamos 1 método con parámetros. Ok, llegaremos a eso.





Y luego atención: un gerente se acercó a nosotros y nos dijo: queremos poder deshabilitar productos en el sitio. Aquellos. es necesario agregar una bandera activa para los productos, que tiene el valor verdadero / falso. Los productos con la bandera falsa no deben mostrarse en el sitio.





En pocas palabras: necesitamos encontrar todos los lugares en el código que obtienen productos y agregar lógica en todas partes para que solo se devuelvan los productos con la marca active = true. Aquellos. Es necesario corregir 3 métodos:



Product::getProducts,







Action::getProductsByActionId(actionId),







Article::getProductsByArticleId(arcticleId)







El hecho de que necesitemos arreglar el código en el lugar equivocado es un error sorprendente: en algún lugar se olvidaron de arreglarlo.





Bueno, hagámoslo de modo que solo tengamos 1 lugar para obtener productos. Entonces no habrá tal error.





: , : 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