贫血模式or领域模式.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
贫血模式or领域模式

贫血模式or领域模式/blog/467704最近taowen同学连续发起了两起关于贫血模型和领域模型的讨论,引起了大家的广泛热烈的讨论,但是讨论(或者说是争论)的结果到底怎样,我想值得商榷。问题是大家对贫血模型和领域模型都有自己的看法,如果没有对此达到概念上的共识,那么讨论的结果应该可想而知,讨论的收获也是有的,至少知道了分歧的存在。为了使问题具有确定性,我想从一个简单例子着手,用我对贫血模型和领域模型的概念来分别实现例子。至于我的理解对与否,大家可以做评判,至少有个可以评判的标准在这。一个例子 我要举的是一个银行转帐的例子,又是一个被用滥了的例子。但即使这个例子也不是自己想出来的,而是剽窃的POJOs in Action中的例子,原谅我可怜的想像力 。当钱从一个帐户转到另一个帐户时,转帐的金额不能超过第一个帐户的存款余额,余额总数不能变,钱只是从一个账户流向另一个帐户,因此它们必须在一个事务内完成,每次事务成功完成都要记录此次转帐事务,这是所有的规则。??贫血模型我们首先用贫血模型来实现。所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个对象充当的就是一个数据容器,用C语言的话来说就是一个结构体,所有的业务方法都在一个无状态的Service类中实现,Service类仅仅包含一些行为。这是Java Web程序采用的最常用开发模型,你可能采用的就是这种方法,虽然可能不知道它有个ldquo;贫血模型rdquo;的称号,这要多亏Martin Flower(这个家伙惯会发明术语!)。?包结构 在讨论具体的实现之前,我们先来看来贫血模型的包结构,以便对此有个大概的了解。? 贫血模型的实现一般包括如下包:dao:负责持久化逻辑model:包含数据对象,是service操纵的对象service:放置所有的服务类,其中包含了所有的业务逻辑facade:提供对UI层访问的入口代码实现 先看model包的两个类,Account和TransferTransaction对象,分别代表帐户和一次转账事务。由于它们不包含业务逻辑,就是一个普通的Java Bean,下面的代码省略了get和set方法。Java代码 ?public?class?Account?{ ??????private?String?accountId; ??????private?BigDecimal?balance; ????????public?Account()?{} ??????public?Account(String?accountId,?BigDecimal?balance)?{ ??????????this.accountId?=?accountId; ??????????this.balance?=?balance; ??????} ??????//?getter?and?setter?.... ????}??public class Account {private String accountId;private BigDecimal balance;public Account() {}public Account(String accountId, BigDecimal balance) {this.accountId = accountId;this.balance = balance;}// getter and setter ....}Java代码 ?public?class?TransferTransaction?{ ??????private?Date?timestamp; ??????private?String?fromAccountId; ??????private?String?toAccountId; ??????private?BigDecimal?amount;?? ????????public?TransferTransaction()?{} ????????public?TransferTransaction(String?fromAccountId,?String?toAccountId,?BigDecimal?amount,?Date?timestamp)?{ ??????????this.fromAccountId?=?fromAccountId; ??????????this.toAccountId?=?toAccountId; ??????????this.amount?=?amount; ??????????this.timestamp?=?timestamp; ??????} ????????//?getter?and?setter?.... ?

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档