-1
A
回答
0
非常普遍的做法是將DTO包裝到實體中並在實體中實現業務規則。
var state = new DTO();
var entity = new Entity(state);
//this will change the state in a consistent way according to business rules
entity.DoSomething1();
entity.DoSomething2();
//this is C#, so I can't get immutable version easily, but if your language allows that - you should return immutable state from entity. Or you can return a clone of the state
state = entity.State;
//store or do whatever you like with the state as long as you keep it immutable.
_repository.Save(state);
0
由於DTO只是一個數據傳輸對象,它不應該應用任何業務邏輯。
DTO有N個實體
更可取的方法是創建你的情況的集合類,並應用內部業務邏輯的性質。
public class Entitity1
{
}
public class Entity2
{
}
public class EntityAggregate
{
public EntityAggregate(Entity1 entity1, Entity2 entity2) // constructor
{
this.entity1 = entity1;
this.entity2 = entity2;
}
public ExecuteYourBusinessCase()
{
... access entity1 and entity2 here and evaluate business logics
}
}
另外值得一提的是DDD的一個創意是防止創建無效的對象。所以你應該保證,如果域實體已經被創建,它是有效的,並且DTO可以被創建。業務邏輯仍然是負責DTO創建面層的黑色盒子
0
在其他的答案已經指出:
你不應該在你的DTO的業務規則。
雖然,當話題是DDD,另一個很常見的方法,以確保你總是創建有效的域對象是使用Builder Pattern。
此模式允許您改變產品的表示。例如,軟件可以有一個域計價產品,但是 - 在現實世界中的表示 - 這可能是一個服務或材料(我可以賣一個手機或手機保險),於是兩個建設者必須(MaterialBuilder和ServiceBuilder,即ie),它們構建相同的域對象Product。
這種圖案通常使用具有方法鏈接並導致連貫接口。
相關問題
- 1. 如何在業務規則屬性可訪問性時測試業務規則?
- 2. SQL。分層次應用業務規則
- 3. 如何以及何時應用業務規則?
- 4. 如何測試業務規則?
- 5. 何時使用業務規則引擎
- 6. MVC中的業務規則在哪裏
- 7. 配售業務規則庫
- 8. 業務規則引擎
- 9. 業務規則Xtext語法
- 10. 部署規則服務WSO2業務規則服務器
- 11. ETL應該如何實現業務規則?
- 12. 業務規則違規和例外
- 13. 在數據庫級別應用業務規則
- 14. Web應用程序中的動態業務規則
- 15. Bluemix上業務規則服務的測試規則
- 16. 使用XSLT處理業務規則?
- 17. Enterprise Architect中的業務規則模型
- 18. jbpm業務規則任務示例
- 19. 我們是否將業務規則放在業務用例圖中?
- 20. 如何在.htaccess中應用規則
- 21. 業務規則用戶的Java應用程序
- 22. 針對Windows應用程序的代碼效果業務規則
- 23. 業務規則應該在哪裏實施?
- 24. 避免N + 1選擇在NHibernate中使用業務規則
- 25. 用於在T-SQL中標識聯結表的業務規則?
- 26. 將業務規則與業務流程分離
- 27. 的ServiceNow:開始從業務規則
- 28. TDD和業務規則 - 網絡API 2.0
- 29. 業務規則的jBPM流程
- 30. 業務規則引擎對.NET
如果您希望確保他們正在整理來自多個實體的正確數據項,那麼您的DTO中不應該有業務規則,我會在單元測試中針對DTOMapping服務執行此操作。 –
我不明白這個問題。給我舉個例子。 –
你做**不需要**,你**決定**來。完全沒有理由**要驗證您的DTO是否違反業務規則,或者您的設計出現問題。 **詳細信息**您的**背景**和您的**期望值**以獲得正確的答案。 –