Dan*_*nil 2 architecture design-patterns domain-driven-design
我读过DDD书(Eric Evans),需要在演示中使用的程序应该转移到服务类.例如,BankAccountManagementService具有ChangeBankAccount,GetByAccountId ...方法.
但是,我需要封装一些属性的setter,以禁止从其他业务对象分配它们.由于C#没有友好的类,因此在服务的情况下不可能使用这种类型的封装.但是可以使用BankAccount业务对象的静态方法来完成它.
(1)如果因上述原因使用服务,您如何解决此限制?
编辑:其他问题
(2)为什么使用静态方法代替服务是不好的?我可以将它们放在单独的部分类文件中,以免将proc代码与实体代码混合.
提前致谢 :)
如果不应设置域对象的属性(不可变),则将它们设为私有(或受保护).
负责更改域对象的私有属性的服务方法将执行必要的验证和/或权限检查,并通过其构造函数(包括其id)创建一个新对象,其中包含要更改的属性并保存该对象.
另一种选择是在您的域对象上放置一个set方法,该方法接受新值,以及某种权限对象,或者将该方法赋值为需要某些特权.这样你就可以约束调用集合的位置.
编辑:使事物静止是一个建筑黑洞:你不能从他们继承或以任何方式改变他们.它使得无法使用依赖注入.版本控制更难; 一旦你做了静态和使用,很难扭转这个决定.此外,您的静态方法今天可能不使用实例数据,但将来可能需要它.
当方法是实例方法时,您可以使用多态和泛型,创建一个通用的ServiceBase类并在其中放置常用的方法.
归档时间: |
|
查看次数: |
2517 次 |
最近记录: |