贫血模型or领域模型

贫血模型or领域模型

ID:12344397

大小:185.50 KB

页数:15页

时间:2018-07-16

贫血模型or领域模型_第1页
贫血模型or领域模型_第2页
贫血模型or领域模型_第3页
贫血模型or领域模型_第4页
贫血模型or领域模型_第5页
资源描述:

《贫血模型or领域模型》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、最近taowen同学连续发起了两起关于贫血模型和领域模型的讨论,引起了大家的广泛热烈的讨论,但是讨论(或者说是争论)的结果到底怎样,我想值得商榷。问题是大家对贫血模型和领域模型都有自己的看法,如果没有对此达到概念上的共识,那么讨论的结果应该可想而知,讨论的收获也是有的,至少知道了分歧的存在。为了使问题具有确定性,我想从一个简单例子着手,用我对贫血模型和领域模型的概念来分别实现例子。至于我的理解对与否,大家可以做评判,至少有个可以评判的标准在这。一个例子我要举的是一个银行转帐的例子,又是一个被用滥了的例

2、子。但即使这个例子也不是自己想出来的,而是剽窃的<>中的例子,原谅我可怜的想像力。当钱从一个帐户转到另一个帐户时,转帐的金额不能超过第一个帐户的存款余额,余额总数不能变,钱只是从一个账户流向另一个帐户,因此它们必须在一个事务内完成,每次事务成功完成都要记录此次转帐事务,这是所有的规则。  贫血模型我们首先用贫血模型来实现。所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个对象充当的就是一个数据容器,

3、用C语言的话来说就是一个结构体,所有的业务方法都在一个无状态的Service类中实现,Service类仅仅包含一些行为。这是JavaWeb程序采用的最常用开发模型,你可能采用的就是这种方法,虽然可能不知道它有个“贫血模型”的称号,这要多亏MartinFlower(这个家伙惯会发明术语!)。 包结构在讨论具体的实现之前,我们先来看来贫血模型的包结构,以便对此有个大概的了解。 贫血模型的实现一般包括如下包:·dao:负责持久化逻辑·model:包含数据对象,是service操纵的对

4、象·service:放置所有的服务类,其中包含了所有的业务逻辑·facade:提供对UI层访问的入口代码实现先看model包的两个类,Account和TransferTransaction对象,分别代表帐户和一次转账事务。由于它们不包含业务逻辑,就是一个普通的JavaBean,下面的代码省略了get和set方法。Java代码1.public class Account {  2.    private String accountId;  3.    private BigDecimal balanc

5、e;  4.  5.    public Account() {}  6.    public Account(String accountId, BigDecimal balance) {  7.        this.accountId = accountId;  8.        this.balance = balance;  9.    }  10.    // getter and setter ....  11.  12.}  publicclassAccount{privateSt

6、ringaccountId;privateBigDecimalbalance;publicAccount(){}publicAccount(StringaccountId,BigDecimalbalance){this.accountId=accountId;this.balance=balance;}//getterandsetter....} Java代码1.public class TransferTransaction {  2.    private Date timestamp;  3. 

7、   private String fromAccountId;  4.    private String toAccountId;  5.    private BigDecimal amount;    6.  7.    public TransferTransaction() {}  8.  9.    public TransferTransaction(String fromAccountId, String toAccountId, BigDecimal amount, Date ti

8、mestamp) {  10.        this.fromAccountId = fromAccountId;  11.        this.toAccountId = toAccountId;  12.        this.amount = amount;  13.        this.timestamp = timestamp;  14.    }  15.  16.    // getter and setter ....  17

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。