锁定老帖子 主题:领域模型的价值与困境
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-23
能否把此篇制成PDF 以飨食大家
|
|
返回顶楼 | |
发表时间:2008-12-23
赞同上面几位说过的一些话
简单 实用 应该是最好的 OO的思想就是现实的体现 |
|
返回顶楼 | |
发表时间:2008-12-24
业务与技术要分开,却一定需要懂业务也懂技术的人。
|
|
返回顶楼 | |
发表时间:2008-12-24
robbin 写道 所以最终我对这个问题的总结就是: 一、只要技术框架能够实现,尽量使用领域模型 二、无论Java还是Ruby,必须消灭DAO和TransactionScript 三、领域模型不必All-in-One,Java可以分割为 1个entity bean和几个business bean,而Ruby可以分割为1个model和几个mixin的module。 对于第3点能举例说下么,我不是很明白在代码中应该怎么写? |
|
返回顶楼 | |
发表时间:2008-12-24
据个例子,我有个Member类,对应数据库的member表,我页面上有个grid,列里显示出member表的全部列,这个Member类分个人会员和企业会员,如果是企业会员的话我要去查企业会员表,个人会员的话个人会员表,我这个domain model调用了dao去查数据库,domain model里可不可以去调用dao查数据库(原因?),我这里该怎么改才比较好。
会员类 pubic class Member { private Long id; private Integer type; //会员类型 (1,个人会员 2,企业会员) ...... private ICompanyMemberDao companyMemberDao = BeanUtil.getBean("companyMemberDao"); ...... /** * 取得公司的名称 */ public String getCompanyName() { if (type == 1) { return getPerson().getPersonName(); } else { return getCompanyMember().getCompanyName(); } } /** * 获取企业会员 */ public CompanyMember getCompanyMember() { if (this.companyMember == null) { this.companyMember = companyMemberDao.findCompanyMemberByMid(id); } return this.companyMember; } /** * 获取个人会员信息 */ public Person getPerson() { if (this.person == null) { this.person = personDao.findPersonByMid(id); } return this.person ; } } |
|
返回顶楼 | |
发表时间:2008-12-30
读完后,感觉一点想法都没有了,一下子世界清静了许多。
|
|
返回顶楼 | |
发表时间:2008-12-31
深深体会过被DAO限制的痛苦,是时候消除DAO层了。
|
|
返回顶楼 | |
发表时间:2009-01-21
xredleaf 写道 据个例子,我有个Member类,对应数据库的member表,我页面上有个grid,列里显示出member表的全部列,这个Member类分个人会员和企业会员,如果是企业会员的话我要去查企业会员表,个人会员的话个人会员表,我这个domain model调用了dao去查数据库,domain model里可不可以去调用dao查数据库(原因?),我这里该怎么改才比较好。
会员类 pubic class Member { private Long id; private Integer type; //会员类型 (1,个人会员 2,企业会员) ...... private ICompanyMemberDao companyMemberDao = BeanUtil.getBean("companyMemberDao"); ...... /** * 取得公司的名称 */ public String getCompanyName() { if (type == 1) { return getPerson().getPersonName(); } else { return getCompanyMember().getCompanyName(); } } /** * 获取企业会员 */ public CompanyMember getCompanyMember() { if (this.companyMember == null) { this.companyMember = companyMemberDao.findCompanyMemberByMid(id); } return this.companyMember; } /** * 获取个人会员信息 */ public Person getPerson() { if (this.person == null) { this.person = personDao.findPersonByMid(id); } return this.person ; } } 我有些晕,为什么会存在Member这个对象?难道不应该只是存在CompanyMember和Person吗?然后查找的行为放在Manager中去,或者将各自的行为放在各自的QueryObject放在Entity上,再或者以静态的方法存在于各自的Entity上? |
|
返回顶楼 | |
发表时间:2009-01-24
taowen 写道 价值 数据,一定是数据。做企业系统,最核心的东西一定是数据。 我这边想表达一下我的看法: 数据是我们企业系统的要管理的对象,一个软件最核心的是如何“有效的管理数据”,而不“只是”保证数据正确,保证数据的正确,不管难度多大,都比较是低层面的。 领域模型,我认为它建立起来的一个原因是OO的发展,使用OO来接解决一些问题。 领域模型关注的地方,在于汲取业务知识,复杂问题简单化,抽象成建立清晰简单的模型。 领域建模,我觉得,领域模型比较能够解决复杂业务的东西,但是,开发比较慢,因为,他要不断提纯模型,是的模型能够准确清晰的表达业务含义。 但是一个有效的模型的建立,会使得以后解决问题都有清晰的思路。 对于领域模型,处理类的方法膨胀问题,方法有很多种。 但是,大多数出现的问题,都是对于领域没有提纯好,本来的两个domian的问题,非的一个domain类处理。 我个人认为: 对于领域模型使用上的最大问题,是如何建立良好模型的问题,这里会有好几个问题一般会遇到: 1.把那些方法认为是service的,那些认为是domain的,这个robin说过(我理解的大致是:一般性的要到dao的方法),eric也说过(我理解的大致是:那些是过程性的行为,比如营业员的柜台收钱,适合service)。 2.类里的方法膨胀,我认为大多是没有提取好业务模型所致,本来的两个domian的问题,非的一个domain类处理。还有些本身就很庞大的类。需要借助pub/utils 这些来避免,当然还有很多其他途径,建议看完ddd之后,“应用它所提出的方法”搞完一个项目之后,再做评价。 看了一些评论,发现大多数只是简单的做过一些很简单的实验性的东西,不能够说明很多问题。 |
|
返回顶楼 | |
发表时间:2009-02-12
最后修改:2009-02-12
企业应用?OO? 切莫被flower给忽悠了,不是搞组件开发的玩充血就是自找没趣,还是SOA思想来的实在。
DAO也是个大忽悠,持久层更换的需要,谁遇到过。 还有那个qi4j,写个helloworld都复杂无比,知道有这么个东西就行了,嘿嘿 |
|
返回顶楼 | |