我們在今天的工作中花了一段時間爭論這個話題,我想我需要聽聽其他一些看法。單一責任/分離擔憂PHP
開始我們的討論點被設計爲了類的某種 - 即
class order {
private $productList;
public function __construct()
//some kind of constructor
}
public function getProductList()
{
return $this->productList;
}
}
所以訂單對象持有一個抽象的產品清單(產品基本上是一個集合)上,我們可以執行某些操作/質譜操作(即獲得所有產品的總量,獲得總稅額等)。到目前爲止,我們都同意這種設計。但是,當它來到真正建立這個順序列表,我們 - 讓我們說 - 不同意:)
我就已經開始這樣的:
class productList {
/** @var array */
private $productList;
public function add(Product $product)
{
$this>-productList[] = $product;
}
}
也有使用工廠另一個想法:
class ProductListFactory {
private $productRepository;
public function __construct(ProductRepository $productRepository)
{
$this->productRepository = $productRepository;
}
public function createFromOrderNumber($orderNumber)
{
$products = $this->productRepository->getAllProdctsForOrder($orderNumber);
return new ProductList($products);
}
}
class ProductList {
/** @var array */
private $products;
public function __construct(array $products)
{
$this->products = $products;
}
}
我可以看到在這裏使用工廠的「魅力」,而不允許從「外部」向列表添加新產品。但不知何故,這對我來說並不合適。也許任何人都可以在這點上啓發我:)謝謝!
沒有辦法以任何方式回答這個問題,不會歸結爲「意見」。人們可以去元,也會爭辯說,爲一個「笨蛋」類項目構建一個完整的對象也是矯枉過正的,這使得整個問題都沒有實際意義。 –
取決於項目是否是長期的。如果它將是長期的,我會選擇工廠,因爲它可以讓你改變事情而不必改變太多。假設你想要構建一些與衆不同的東西。像馬克B說這是一個意見。 –