我很喜歡,他建議青睞一成不變的實體和而不是改變數據結構由馬可Pivetta在PHP英國會議2016(https://youtu.be/rzGeNYC3oz0?t=2011)中描述的技術 - 追加他們。作爲獎勵的變化歷史是一個很好的事情,有很多不同的原因,所以我想在我的項目中應用這種方法。讓我們來看看下面的用例:Doctrine2一成不變的實體,並附加唯一的數據結構
class Task {
protected $id;
/**
* Status[]
*/
protected $statusChanges;
public function __construct()
{
$this->id = Uuid::uuid4();
$this->statusChange = new ArrayCollection();
}
public function changeStatus($status, $user){
$this->statusChange->add(new Status($status, $user, $this);
}
public function getStatus()
{
return $this->statusChange->last();
}
}
class Status {
protected $id;
protected $value;
protected $changedBy;
protected $created;
const DONE = 'Done';
public function __construct($value, User $changedBy, Task $task)
{
$this->id = Uuid::uuid4();
$this->value = $value;
$this->changedBy = $changedBy;
$this->task = $task;
$this->created = new \DateTime();
}
}
$user = $this->getUser();
$task = new Task();
$task->changeStatus(Status::DONE, $user);
$taskRepository->add($task, $persistChanges = true);
所有狀態更改我打算堅持在MySQL數據庫中。所以協會將是一個(任務)對多(狀態)。
1)通過當前狀態獲取任務的推薦方式是什麼? IE瀏覽器。所有當前打開,已完成的待處理任務。
$taskRepository->getByStatus(Status::DONE);
2)什麼是這種技術你看來,有可能會出現在未來的一些缺點,如該項目將壯大?
3)如果是比較實用的(保存狀態變化的任務領域的序列化陣列,或在單獨的表?
感謝的意見!