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