我比较同意neooen的看法,bang的部分看法我也同意,但关于他反对所谓的贫血模型,呵呵。域模型说白了就是数据的载体,应该只有自己的一些属性和属性状态变化的方法,就setter和getter方法。关于对它的系列化应该由专门负责这样事情的操作类来处理,就象上面所说的userManger一样。现在看看下面的代码:
public class User extends AbstractValueObject { private int ID; private String name; private String password; private int GroupID; .... public void setPassword(String password){ ... } public void changePassword(String password){ ... } ....}
public interface AbstractDAO
extends Serializable {
public abstract int insert(AbstractValueObject abstractvalueobject) throws
SQLException;
public abstract int update(AbstractValueObject abstractvalueobject) throws
SQLException;
public abstract int delete(Object obj) throws SQLException;
public abstract int insert(AbstractValueObject abstractvalueobject,
Connection connection) throws SQLException;
public abstract int update(AbstractValueObject abstractvalueobject,
Connection connection) throws SQLException;
public abstract int delete(Object obj, Connection connection) throws
SQLException;
public abstract AbstractValueObject findByPrimaryKey(Object obj) throws
SQLException;
public abstract AbstractValueObject findByPrimaryKey(Object obj,
String[] sqls) throws SQLException;
public abstract Collection findAll() throws SQLException;
public abstract Collection findBySql(String s) throws SQLException;
public abstract Collection findBySql(String s, Connection connection) throws
SQLException;
public abstract Page getPageBySql(String s, Integer start, Integer count) throws
SQLException;
public Collection getPageColBySql(String findSql, Integer starIndex,
Integer pageSize, Integer pageCount) throws
SQLException;
}
public UserDAO impletments AbstractDAO { .........}
public UserManager {
private startic UserDAO dao = new UserDAO
public createUser(User user) {
dao.create(user);
................
}
public changePassword(User user) {
//user已经在外面user.setPassword(newPassword);
dao.update(user);
...................
}
}
在Ejb的Entity Bean其实不是和user类似,而是和UserDao类似,不信你看看他的skelet实现类(了解RMI的理论),呵呵,里面是什么,是jdbc。所以不要误会了,虽然它能给外面提供域模型实例集合。看下面:
public java.lang.String ejbCreate(ForumValueObject vo) throws CreateException {
System.out.println("ejbCreate(vo)");
String forumId = vo.getForumId();
String forumName = vo.getForumName();
String forumCnname = vo.getForumCnname();
String forumProductid = vo.forumProductid;
com.topfounder.common.database.TPClob tmpTPClob = vo.getContent();
String content = tmpTPClob == null ? null : tmpTPClob.getContent();
String admin = vo.getAdmin();
java.sql.Date registerdate = vo.getRegisterdate();
String topic = vo.topic;
String remark = vo.getRemark();
ejbCreate(forumId, forumName, forumCnname, forumProductid, content, admin,
registerdate, topic, remark);
return null;
}
其实 它就是系列化域模型,这里JDBC你没有看到,但在它的具体实现(skelet)里就看到了。
我反对批评所谓的贫血模型,在贫血模型加上不伦不类的逻辑操作才是怪物,我在说一下,域模型就是一个数据载体。