2012-03-22 66 views
0

記錄事件目前,我有這樣的結構:放置位置信息,並使用POEAA

Domain Model <---> Data Mapper ---> Database

說我加一個孩子「文件」對象的「項目」對象。我想爲該項目自動創建一個表示更新的子註釋對象。現在,這個註釋的創建由'項目文件映射器'處理 - 在'uploadFile'方法中,新的註釋被實例化和填充,並且調用「註釋映射器」來保存該註釋。該項目在詢問其子女筆記時調用筆記映射器,以此類推文件。

或者說我刪除了一個'project'對象 - 我想刪除子註釋和文件,所以在'projectProperty'方法'deleteProject'中,調用'projectNoteMapper'和'projectFileMapper '來處理刪除這些文件。

我現在開始遇到其他情況,特別是自實施私人消息系統以來。我希望用戶能夠訂閱項目和票據並接收有關更新的消息。我也想要實現用戶行爲的深層日誌記錄(包括存儲序列化對象以用於製表)。

我明白我一直在做事情的方式不符合「單一責任原則」 - 畢竟,映射器的目的只應該是在數據源和它們各自的對象之間映射信息,對嗎?我的問題是 - 我應該實施的下一個'圖層'是什麼,我錯過了什麼?我已經閱讀了「倉庫」和「服務」。

回答

0

如果我明白你的問題,那麼我認爲可能會輔助性T清晰起來:

DataMappers都沒有代表性,也沒有對應的單表數據庫。

在你的案例中,對於$projectMapper->remove($project)來說,刪除不僅僅是項目本身,而是DB中的所有相關項目都會有很大的意義。 DataMapper製作多個查詢沒有任何問題。您只需執行隨附的錯誤報告設置,即可知道何時出現問題。

是的,這在某些方面也違反了SRP(但僅當您將數據庫中的每個更改視爲修改DataMapper類的單獨原因時)。

至於哪一個是發展模型層的下一個邏輯步驟:你會發現這個PoEEE entry相關。只需要保留Service layer不僅僅是頂級DataMapper和Domain Object上的API。它還包含服務,這與模塊的其餘部分有些獨立。像郵件發件人和身份驗證一樣。

另外,爲了清除該向上:

模型是不是一類的,但一個層,其中包含兩個域對象[1][2]和DataMappers。

+0

感謝您的回覆。 當談到項目和項目文件的映射器時,每個都使用多個「資源」 - 即多個表,或者在項目文件,系統目錄以及數據庫表的情況下。出於這個原因(兩個對象之間的顯着差異),我覺得他們都應該擁有自己的映射器。然後,這個問題正在協調... ...和您發佈的鏈接(我也有這本書)似乎服務層就是這樣。發佈這個問題之後,我已經開始實施這個模式,並且這很好。謝謝 – tuespetre 2012-03-25 15:54:04