我正在設計一個應用程序,它將動態生成的表單顯示給用戶,然後他們將值輸入表單字段並提交這些值以進行持久化。該表格代表員工評估。幫助將DDD應用到動態表單應用程序
一個用例允許管理員(來自HR)定義表單域。他們應該能夠創建一個新表單,添加/刪除表單中的字段並將表單標記爲「已刪除」。
第二個用例是當經理查看錶單並將值輸入到特定員工的表單字段中時。他們應該能夠隨時保存這些值,並在爲同一員工再次查看錶單時調用保存的值。
最後,當經理滿意,他們已經針對該員工輸入的值,就可以「提交」,其持續扁平化數據轉換成用於報告數據倉庫中的表單數據。完成後,數據的「工作」副本將被刪除,以便表單在下次查看該員工時顯示空白。
我不擔心在這一點前端和客戶端和數據存儲之間坐鎮後端服務應用程序的工作。應用程序必須爲所有需要的行爲提供一個粗略的界面。
我的問題是我有多少聚合根(實際上有多少存儲庫等)?我是否將表單定義與表單數據分開,即使我在向用戶顯示錶單時都需要這兩種表單定義?
這幾乎是我最初的想法。爲了回顯,我的服務類將具有像GetEmployeeEvaluation(empId)這樣的方法,該方法調用EmployeeEvaluationRepository.GetById(empId)方法,該方法負責返回包含Schema以及值集合的整個EmployeeEvaluation聚合根。調用服務的SaveEmployeeEvaluation(eval)方法時,它會調用忽略模式並保存值的EmployeeEvaluationRepository.Update(eval)方法。我在同一頁嗎? – SonOfPirate
如果模式和數據(值)存儲在不同的數據庫中,它是否會改變您的想法? (新要求) – SonOfPirate
只要您的存儲庫可以加載數據,存儲數據的位置就不那麼重要了。 ORM的一個考慮因素是,如果您爲每個實體完全分開數據庫,則除非您願意進行一些非規範化操作,否則您將不得不使用兩個存儲庫來加載數據,以便將架構作爲評估表複製爲好。 – eulerfx