它將是一個完全理論化的線程。使用特殊的「提議」對象而不是數組
讓我們來談談將數組更改爲特定對象的方法,以便對其進行比較和處理。
例如,我們有一個EntityClass
,EntityInterface
,SomeRepository
,SomeManager
,SomeCommand
。
實體是一個明顯的對象,例如:
class EntityClass implements EntityInterface {
public $name;
public funtion getName() {
return $this->name;
}
public function assign($data) {
$this->name = $data['name'];
}
...
}
庫OFC。有方法來保存源代碼中的對象並從源代碼中獲取它。
管理器具有所有'業務邏輯',它可以使用命令模式修改實體,爲一個屬性修改一個命令,因此所有屬性的業務邏輯將其存儲在單獨的命令中,並由管理器將其激活。
現在,在經理啓動所有的邏輯和樂趣。 小小的速記:
- 存儲庫通過getOne()創建新的實體。
- 我們創建了一個新的管理器實例,並通過構造函數傳遞了一些依賴項,如控制器和實體中的數據數組。
- 數據數組包含有關更改的信息,例如:
['name' => 'New name'];
mapper解決管理器針對給定數組應該執行的命令。 - 管理器對此請求執行所有命令並將原始數組傳遞給每個命令。
現在,我們爲什麼要傳遞數組?當我們在OOP時,爲什麼不使用EntityClass
的特殊變化?
現在讓我們添加一個新接口EntityProposeInterface
,並將原始數組更改爲實現此接口的類,然後傳遞它們。
例如,我們可以添加到SomeManager
speciall方法變身像這樣(PHP7 +)實體:
class SomeManager {
public function morph($entity) {
$buff = new class extends EntityClass implements EntityProphoseInterface{};
$buff->assign($entity->toArray());
return $buff;
}
而現在我們有一個EntityProphose
讓做出一些改變,現在的經理從原始數據改變EntityProphose
數組,以及我們的代碼工作中的所有命令和其他方法,而不是數組。
但是,我們的存儲庫不能保存對象的instance of EntityProphoseInterface
。
這就是全部... 是否有一些設計模式名稱?或類似的東西?
或者這個想法很糟糕?
我希望所有人都清楚,如果不是的話,請問。 任何想法?建議?