我覺得很難決定某些東西是否應該成爲域或應用程序的一部分。DDD:什麼進入域和進入應用程序?
通過這個answer閱讀有助於許多概念,如授權,但我仍然發現自己與其他事情掙扎。
爲了說明我的困惑,請考慮發表評論的案例。以下是在發佈評論前需要做的事情。我在括號中表明我認爲這個功能應該去。
- 確保用戶角色/狀態允許在這篇文章發表評論(授權,去申請)
- 確認後存在並出版(域),這是我們所評論
- 確保用戶在最後一分鐘沒有發佈超過5條評論(節流,直覺說它去應用程序)
- 確保評論不是一個空字符串(域)
- 確保評論沒有髒話(域?)
- 確保評論沒有來自同一用戶重複在這個崗位(域?)
- 格式的註釋(應用)
- 取下評論說,不允許對當前用戶(應用程序)
- 檢查某些HTML標籤垃圾評論(應用程序?)
我無法確定檢查垃圾郵件的評論是否是域關注或應用程序,同樣適用於限制。從我的角度來看,這些擔憂都對我很重要,必須在場。但同樣適用於授權,我們知道它不應該在域中。
如果我在域服務和應用程序服務之間分解這些問題,那麼我覺得我的域沒有完全實施,實際上依靠應用程序進行事先檢查。在那種情況下,整個問題是什麼,爲什麼我不能在應用程序中盡全力來減少混淆?
我的當前設置做到這一點:
Controller -> App.CommentingService.Comment() -> Domain.CommentingService.Comment()
這將是有益的,如果有人可以辦理所有必要的步驟來創建註釋,並將其分配到正確層給予一定的推理背後。
節流是爲了確保垃圾郵件發送者可以被控制。此外,正在檢查評論是否包含域名關注的垃圾郵件鏈接?無論它是在Web應用程序,SOAP Web服務還是桌面應用程序中,我都希望這會發生。同樣適用於節流。 –
我認爲你的回答非常好。這讓我想到了我會問自己的每個要求:「如果這個規則不被執行,域會被打破嗎?」。所以對於他們大多數人來說,答案是否定的。如果限制,重複評論,髒字,格式,html標籤甚至授權未被強制執行,則域仍然是完整的。我們的應用程序安全性,性能,友善性,展示可能會失敗,但該域名仍然是正確的。評論仍然會加載並且工作得很好,儘管用粗言穢語和難看的格式。 –
但是,如果我們不強制該評論必須屬於真正的帖子,或者該評論不能爲空,那麼這很可能會破壞該域名。但是,如果我們允許發佈到未發佈的帖子或評論已關閉的帖子,域名是否會被破解尚不清楚。從技術上講,一切都會正常工作,領域將會完好無損,但商業規則將被打破。你對此有何看法? –