领域驱动建模,一起探讨领域驱动设计——架构与建模


领域驱动设计,挺好的,新做的一个商城也是基于这个思想来进行开发的。由此,想和大家一起分享一下应用这个思想在做项目中的一些领悟与经验,正好也能和大家一块探讨DDD,使我们能更好地理解领域驱动设计。 这一篇就和大家分享一下我使用的一些用于架构与建模使用的组件。

在这里,个人推荐使用一个开源的DDD框架组件:SharpArch.dll
这里是它的官方网站:/// /// 会员基本信息 /// public class Member : Entity { // 属性略了.. public Member() { this.SendMoneyTransLogs = new List(); this.ReceiveMoneyTransLogs = new List(); } /// /// 会员转账 /// /// 收钱的
/// 转多少钱
public virtual void TransMoney(Member recieveMember, decimal transMoney) { // 校验下你的钱够不 if (this.SafeMoney < transMoney) throw new Exception("你个货,没那么多还想转账啊!"); // 我口袋的钱放血 this.SafeMoney -= transMoney; // 收钱的人收钱 recieveMember.SafeMoney += transMoney; // 来个日志 var transLog = new MemberMoneyTransLog { ReceiveUser = recieveMember, SendUser = this, TransMoney = transMoney, TransTime = DateTime.Now }; // 我的转出日志里面加条记录 this.SendMoneyTransLogs.Add(transLog); } }
好了,给Member模型加了针“会员转账”的血了,有的哥们又会问了,这样打鸡血的好处是??
好吧,被你凹凸曼的造型打败了,回到传统BLL + DAL的三层构架中,我们是怎么实现的呢:
  1. 建个BllMember业务逻辑类;
  2. 加个方法TransMoney,使用三个DAL方法:给转账的人减钱,给接收的人加钱,再写条转账日志;
嗯嗯,差不多了,OK了,再回头看看代码。OMG,事务,事务!!得套个事务!嗯,加个事务的代码。。
好了,实现了,看代码,业务逻辑在哪里,业务逻辑体现了么,BLL中夹杂着大量的DAL与事务(可能还有LOG4NET的日志记录)代码。 这些代码与业务逻辑有关系么?没有任何关系,这些代码只是数据持久化的体现。。。回头再看看DDD中的实现,是不是觉得神精气爽??
到了这里,各位朋友可能会有不少疑问:
  1. 实体的属性与方法为什么是虚(virtual )的呢?(好吧,你猜到了,数据持久化用的是NHibernate)
  2. 实体的数据持久化是怎样的呢?
  3. 业务逻辑实现了,我们的在UI层需要怎么调用呢?
  4. “会员转账”的方法中,并没有事务呀,事务是怎么实现的呢?
呵呵,由于时间的关系,老婆要我交差了,诸位请听下回分解。。
Tags:  模型驱动架构 领域驱动 领域建模 领域驱动设计 领域驱动建模

延伸阅读

最新评论

发表评论