這裏的情景:SOLID原則,同時創建對象
用戶可以創建使用形式的形狀。
用戶將從形狀(圓形,正方形,矩形等)的選項列表中選擇,並通過點擊創建按鈕形狀提交表單。
他創建的形狀將鏈接到他的帳戶。
這裏是我如何接近它:
的接口Shape
與方法簽名create()
的形狀,這將是個人形類實現。
# Shape.php
interface Shape {
public function create();
public function area();
}
# Rectangle.php
class Rectangle implements Shape {
private $user;
private $data; # user submitted data
public __construct($user, $data) {
$this->user = $user;
$this->data = $data;
}
public function create() {
# get rectangle shape details from RectangleShapeAPI
$userShape = new UserShape; # the model to store data
$userShape->shape_id = $this->data['shape_id'];
$userShape->area = $this->area();
$userShape->users_id = $user->id;
# save rectangle shape details from API
if (!$userShape->save()) {
return false;
}
return true;
}
public function area() {
return $this->data['length'] * $this->data['breadth'];
}
}
現在,我已經到過switch($shapeType)
由用戶選擇以適當地實例化Square
或Circle
或Rectangle
類的形狀類型。
$data = $_POST;
switch($shapeType) {
case 'square':
Shape $shape = new Square($user, $data);
$shape->create();
break;
and so on...
}
這是我在執行
SOLID Principles
第一步,我 想我可能得到它錯了。在這種情況下請原諒我。的問題是我認爲switch語句(我見過的例子 人們試圖消除
switch
或conditions
當他們嘗試 使用這些對象)。我只在使用 物體時纔看到這一點,我認爲這很容易實現。但是,我們可以實現在對象創建的時間(我無法找到此之外的任何 合理的解決方案比switch
荷蘭國際集團在形狀)相同 。其他的事情是,如何有效地處理
$_POST
數據,因爲將來數組的鍵可能會改變,並且可能發生任何事情。 你會如何處理這種情況?
以上的說明我的情況的簡化版本。
我有一個Accounts
接口與add()
方法是由FacebookAccount
,GoogleAccount
和GoogleAccount
和其他類實現。
現在方法add()
這些帳戶是不同的,因此,作爲接口。 Facebook
或Google
API對象被創建並且用戶數據被提取以存儲到UserAccount
中。帳戶鏈接到用戶。
我歡迎所有希望通過SOLID原則解決此問題的人。我會非常感謝所有人,並希望我能瞭解很多關於原理和我做錯的事情。
謝謝。
編輯
鏈接SOLID原則:SOLID Principles Wikipedia
您能否請包含一個指向上面的SOLID Princpiples的鏈接?在你的情況下,我會實現一個抽象的Shape類,並做這些東西,這是所有Shapes的commen,以避免冗餘。 – noreabu
我已經包含鏈接。我也可以,但'create()'方法必須調用一些外部API來獲取一些數據並存儲'UserShape'對象。 'create()'的功能在形狀上有所不同。或者在我的情況下,賬戶之間的功能不同。 –