论坛首页 Java企业应用论坛

是否应该让实体类具备丰富的业务逻辑?

浏览 67202 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2005-03-23  
To jackyz:

我认为按照Martin大叔的模型,就是这样得到的:

Forum f = Forum.findById(forumId);; 
0 请登录后投票
   发表时间: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一起贯穿业务实体的生命周期,当然和业务实体一起属于领域层。我想这个是大家各执一词的原因,因为说的概念各不相同
0 请登录后投票
   发表时间:2005-03-23  
本来对Martin Fowler的DDD一点兴趣都没有,现在倒很想看看了,看看Martin Fowler怎么解释我提出的疑问?
0 请登录后投票
   发表时间:2005-03-23  
robbin 写道
To jackyz:

我认为按照Martin大叔的模型,就是这样得到的:

Forum f = Forum.findById(forumId);; 

别瞎猜了,去重读MartinFowler的书吧。

将查找方法放入类的静态方法是不合适的,这样在需要新的查询方法时,就不得不改类了。这不符合单一职责原则。
0 请登录后投票
   发表时间:2005-03-23  
robbin 写道
本来对Martin Fowler的DDD一点兴趣都没有,现在倒很想看看了,看看Martin Fowler怎么解释我提出的疑问?

DDD不是MartinFowler的是Eric Evans的。呵呵
0 请登录后投票
   发表时间:2005-03-23  
partech 写道
将查找方法放入类的静态方法是不合适的,这样在需要新的查询方法时,就不得不改类了。这不符合单一职责原则。


是了,所以我说,"这样...好吗?"

anyway,现在既然提到了DomainObject的N多好处,想必它也应该需要一些特定的方式来获得支持,上下文中,提到的概念也很多了(Repository,UnitOfWork,Sevice,Application,Bussiness...),实在有些迷糊,给咱们弄一些demoCode,描绘一个业务从头到尾都经过那些个部分处理,来个整体印象如何?
0 请登录后投票
   发表时间: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)
0 请登录后投票
   发表时间: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。静态语言的好处之一就在于类型检查。你这样是不可取的。
0 请登录后投票
   发表时间:2005-03-23  
jackyz 写道
anyway,现在既然提到了DomainObject的N多好处,想必它也应该需要一些特定的方式来获得支持,上下文中,提到的概念也很多了(Repository,UnitOfWork,Sevice,Application,Bussiness...),实在有些迷糊,给咱们弄一些demoCode,描绘一个业务从头到尾都经过那些个部分处理,来个整体印象如何?

呵呵,这可是大工程。现在没心情和精力弄这些。过段时间看看有没有好的例子,尝试一下。
0 请登录后投票
   发表时间: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。静态语言的好处之一就在于类型检查。你这样是不可取的。


哦,那双向依赖有什么不好之处吗?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics