锁定老帖子 主题:是否应该让实体类具备丰富的业务逻辑?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2005-03-23
To jackyz:
我认为按照Martin大叔的模型,就是这样得到的: Forum f = Forum.findById(forumId);; |
|
返回顶楼 | |
发表时间:2005-03-23
jackyz 写道 还有一个问题.DomainObject从哪里来?
前面的讨论中,似乎看到一个Repository方案: Forum f = forumRepository.findById(forumId);; 这个Repository是个什么对象? 它既然用来获取DomainObject的,那么,也就是说,它和DAO干(部分)相同的工作,它与之前被"隐藏"到DomainObject后面的那些DAO有什么区别呢? 另外一种方案是DomainObject获取它自己. 那么我们也许得到一些代码类似这样: // 比如这样,非static的 Forum f = (new Forum(););.findById(forumId);; // 或者这样,static的 Forum f = Forum.findById(forumId);; 这...,好么? Repository我在DDD里面看到过,和Factory一起贯穿业务实体的生命周期,当然和业务实体一起属于领域层。我想这个是大家各执一词的原因,因为说的概念各不相同 |
|
返回顶楼 | |
发表时间:2005-03-23
本来对Martin Fowler的DDD一点兴趣都没有,现在倒很想看看了,看看Martin Fowler怎么解释我提出的疑问?
|
|
返回顶楼 | |
发表时间:2005-03-23
robbin 写道 To jackyz:
我认为按照Martin大叔的模型,就是这样得到的: Forum f = Forum.findById(forumId);; 别瞎猜了,去重读MartinFowler的书吧。 将查找方法放入类的静态方法是不合适的,这样在需要新的查询方法时,就不得不改类了。这不符合单一职责原则。 |
|
返回顶楼 | |
发表时间:2005-03-23
robbin 写道 本来对Martin Fowler的DDD一点兴趣都没有,现在倒很想看看了,看看Martin Fowler怎么解释我提出的疑问?
DDD不是MartinFowler的是Eric Evans的。呵呵 |
|
返回顶楼 | |
发表时间:2005-03-23
partech 写道 将查找方法放入类的静态方法是不合适的,这样在需要新的查询方法时,就不得不改类了。这不符合单一职责原则。
是了,所以我说,"这样...好吗?" anyway,现在既然提到了DomainObject的N多好处,想必它也应该需要一些特定的方式来获得支持,上下文中,提到的概念也很多了(Repository,UnitOfWork,Sevice,Application,Bussiness...),实在有些迷糊,给咱们弄一些demoCode,描绘一个业务从头到尾都经过那些个部分处理,来个整体印象如何? |
|
返回顶楼 | |
发表时间:2005-03-23
partech 写道 Archie 写道 那我还没找到必须双向依赖的情况呢。
看看这个接口: public interface ICustomerFinder { Customer findByCustomerCode(String customerCode);; } quote] public interface ICustomerFinder { Object findByCustomerCode(Class clazz,String customerCode);; } public class CustomerFinderImpl implements ICustomerFinder { Object findByCustomerCode(Class clazz,String customerCode); { Query query=this.pm.newQuery(clazz);; query.setFilter("customerCode=="+customerCode);; query.setUnique(true);; return query.execute(); } } 非要return 具体的Class吗?自己在cast不行吗? 这里倒是有点依赖的嫌疑,呵呵("customerCode=="+customerCode) |
|
返回顶楼 | |
发表时间:2005-03-23
Archie 写道 public interface ICustomerFinder { Object findByCustomerCode(Class clazz,String customerCode);; } public class CustomerFinderImpl implements ICustomerFinder { Object findByCustomerCode(Class clazz,String customerCode); { Query query=this.pm.newQuery(clazz);; query.setFilter("customerCode=="+customerCode);; query.setUnique(true);; return query.execute(); } } 非要return 具体的Class吗?自己在cast不行吗? 这里倒是有点依赖的嫌疑,呵呵("customerCode=="+customerCode) 我觉得彻底一点更好。 ![]() public interface ICustomerFinder { Object findByCustomerCode(Object clazz,Object customerCode);; } public class CustomerFinderImpl implements ICustomerFinder { Object findByCustomerCode(Object clazz,Object customerCode); { Object query=this.pm.newQuery((Class);clazz);; ((Query);query);.setFilter("customerCode=="+(String);customerCode);; ((Query);query);.setUnique(true);; return ((Query);query);.execute(); } } 这让我想起了VB的Variant。静态语言的好处之一就在于类型检查。你这样是不可取的。 |
|
返回顶楼 | |
发表时间:2005-03-23
jackyz 写道 anyway,现在既然提到了DomainObject的N多好处,想必它也应该需要一些特定的方式来获得支持,上下文中,提到的概念也很多了(Repository,UnitOfWork,Sevice,Application,Bussiness...),实在有些迷糊,给咱们弄一些demoCode,描绘一个业务从头到尾都经过那些个部分处理,来个整体印象如何?
呵呵,这可是大工程。现在没心情和精力弄这些。过段时间看看有没有好的例子,尝试一下。 |
|
返回顶楼 | |
发表时间:2005-03-23
partech 写道 Archie 写道 public interface ICustomerFinder { Object findByCustomerCode(Class clazz,String customerCode);; } public class CustomerFinderImpl implements ICustomerFinder { Object findByCustomerCode(Class clazz,String customerCode); { Query query=this.pm.newQuery(clazz);; query.setFilter("customerCode=="+customerCode);; query.setUnique(true);; return query.execute(); } } 非要return 具体的Class吗?自己在cast不行吗? 这里倒是有点依赖的嫌疑,呵呵("customerCode=="+customerCode) 我觉得彻底一点更好。 ![]() public interface ICustomerFinder { Object findByCustomerCode(Object clazz,Object customerCode);; } public class CustomerFinderImpl implements ICustomerFinder { Object findByCustomerCode(Object clazz,Object customerCode); { Object query=this.pm.newQuery((Class);clazz);; ((Query);query);.setFilter("customerCode=="+(String);customerCode);; ((Query);query);.setUnique(true);; return ((Query);query);.execute(); } } 这让我想起了VB的Variant。静态语言的好处之一就在于类型检查。你这样是不可取的。 哦,那双向依赖有什么不好之处吗? |
|
返回顶楼 | |