Apakah programmer memecahkan masalah yang saling bertentangan (arsitektur kode)

Katakanlah kita memiliki situs web dengan produk. Kami memiliki metode yang Product::getProducts



mengembalikan berbagai produk.





Kemudian seorang manajer mendatangi kami dan berkata: kami ingin melakukan promosi di situs (diskon, penjualan). Produk akan dilampirkan ke setiap promosi. Kami menulis metodeAction::getProductsByActionId(actionId)







Kemudian manajer itu mendatangi kami lagi dan berkata bahwa kami membutuhkan lebih banyak barang yang dilampirkan barangnya. Mari tambahkan metode Article::getProductsByArticleId(arcticleId)



.





Anda berkata - mari kita buat 1 metode dengan parameter. Oke, kita akan membahasnya.





Dan di sini perhatiannya: manajer mendatangi kami dan berkata - kami ingin dapat menonaktifkan produk di situs. Itu. perlu menambahkan flag aktif untuk produk, yang memiliki nilai benar / salah Produk dengan bendera palsu tidak boleh ditampilkan di situs.





Intinya: kita perlu menemukan semua tempat dalam kode yang mendapatkan produk dan menambahkan logika di mana-mana sehingga hanya produk dengan flag active = true yang dikembalikan. Itu. 3 metode perlu diperbaiki:



Product::getProducts,







Action::getProductsByActionId(actionId),







Article::getProductsByArticleId(arcticleId)







Fakta bahwa kita perlu memperbaiki kode di tempat yang salah adalah kesalahan yang mencolok - di beberapa tempat mereka lupa memperbaikinya.





Nah, mari kita buat agar kita hanya punya 1 tempat untuk mendapatkan barang. Maka tidak akan ada kesalahan seperti itu.





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