领域驱动设计案例【Tiny Library业务逻辑与系统结构】

来源:互联网 发布:淘宝运营视频教学视频 编辑:程序博客网 时间:2024/05/16 06:42

之前我发布了领域驱动设计的一个实践案例:Tiny Library。本章介绍该案例实现的业务逻辑与系统结构设计。

 

业务逻辑

Tiny Library的业务逻辑非常简单,主要就是如下两条:

  1. 任何用户可以添加Library中的图书(简化起见,图书不能修改也不能删除),也可以查看图书的详细信息
  2. 注册用户,也就是读者,可以借书、还书、查看自己借过的图书列表和借书信息

篇幅有限,我就不在此将案例的操作过程一一截图了,读者朋友们可以自己下载源代码,然后在Visual Studio 2010中编译运行。

 

系统结构

由于是领域驱动设计,本案例系统分层与传统分层略有不同。分为四层:展现层、应用服务层、领域层和基础结构层。展现层采用ASP.NET MVC框架实现;应用服务层则是一个WCF Service;领域层采用Entity Framework结合本人自己研发的Apworks Application Development Framework;基础结构层则为整个应用提供了IoC、Caching、Specifications、Repository等的具体实现。整个系统架构基本上可以以下图描述:

image 

需要说明的是,在上图中的Domain Model和EdmRepository之间出现了双向依赖,于是我在边上用黄色注释文字作了注解。其实,Domain Model只依赖于仓储(Repository)的接口,而EdmRepository是基于Entity Framework的一种仓储实现方式,它实现IRepository接口,同时也对Domain Model产生依赖,以获得对聚合根的访问。关键的一步在于,Tiny Library采用依赖注入,将EdmRepository注射到Domain Model中,于是,Domain Model根本不依赖于仓储的具体实现方式,保证了领域模型层面的纯净度。领域驱动设计的社区中有很多朋友都对这个问题产生疑问,Tiny Library就是一个回答该问题的很好的案例。

 

Visual Studio 2010解决方案结构

Tiny Library在Microsoft Visual Studio 2010的解决方案下包含六个项目:TinyLibrary.Design、TinyLibrary.Domain、TinyLibrary.Repositories、TinyLibrary.Services、TinyLibrary.WebApp以及TinyLibrary.WebApp.Tests。如下所示:

image

  1. TinyLibrary.Design:项目的一些设计图稿,其中包括上面的架构图。一般没什么用(注意:第一个版本的Tiny Library解决方案中不包含这个项目,不过没关系,不影响大家的阅读和学习)
  2. TinyLibrary.Domain:领域模型项目,其中包括了Tiny Library的领域模型与业务逻辑,也是本案例的核心所在。为了能够以可视化的方式设计领域模型,也是为了采用Microsoft技术来实现案例,本项目采用了Microsoft Entity Framework作为建模工具
  3. TinyLibrary.Repositories:仓储的具体实现项目,它引用TinyLibrary.Domain项目,同时引用Apworks组件以实现IRepository接口。本项目仅包含了针对Entity Framework的仓储实现,同时也一并实现了Repository Transaction Context对象
  4. TinyLibrary.Services:WCF Application Service项目,它占用3722端口,其目的是与Presentation层交互。交互采用Data Transferring Objects(DTO),实现上是一组位于DataObjects目录下的Data Contracts。从这个项目可以看到,DTO与Entity/AggregateRoot并非是一一对应的,虽说在Tiny Library中,看上去是一个Entity/AggregateRoot对应一个Data Object,但仔细阅读可以发现,这些Data Objects中包含的数据跟与之对应的Entity/AggregateRoot中包含的对象状态是有出入的。这是根据应用程序的需求来决定的
  5. TinyLibrary.WebApp:本案例的主程序:一个ASP.NET Web应用程序,以ASP.NET MVC框架为基础,提供用户界面与交互接口
  6. TinyLibrary.WebApp.Tests:TinyLibrary.WebApp项目的单体测试项目,在本案例中,它是创建ASP.NET MVC项目时自动生成的,我没有去写或者修改任何Test Case,所以,可以直接无视这个项目

 

从下一讲开始,我将详细介绍Tiny Library的实现过程。这个过程不会是一步步的手把手教如何创建项目、如何编码等,而是对领域驱动设计在Microsoft .NET技术下的实践进行介绍。这些内容将包括:领域模型的实现、仓储的设计与实现、WCF Service与DTO、ASP.NET MVC的整合、领域驱动设计案例答疑以及Apworks Application Development Framework简介等。敬请期待!

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 租车感觉违章了 怎么办 武汉驾照扣12分怎么办 驾驶证照片泡水不清楚怎么办 驾驶证过了180天怎么办 天津有公司执照怎么办落户 温州车在上海年审手续怎么办 广东小高考考了d怎么办 深圳开摩托抓到怎么办 深圳车卖了车牌怎么办 a1驾照时期过了怎么办 b1驾照扣了12分怎么办 北京的驾照换证怎么办 b2汽车驾驶证年审过期几天怎么办 上海驾照到期人在外地怎么办 交警开的罚单交不了怎么办 珠海交警微信交罚单扣分怎么办 驾驶证违法罚款单子没有了怎么办 转账密码输错3次怎么办 汽车违章扣6分怎么办 汽车扣了72分年检怎么办 汽车扣了50分怎么办 汽车扣了15分怎么办 汽车扣了27分怎么办 汽车扣了40分怎么办 行驶证掉了怎么办 异地 高速上没带驾驶证行驶证怎么办 身份证驾驶证行驶证都丢了怎么办 驾驶证年审过期一个月怎么办 柴油车辆年检尾气不合格怎么办 驾驶证过期了5天怎么办 过了审车时间怎么办 骑车没带行驶证怎么办 轿车行驶证丢了怎么办 车子没年检被扣怎么办 上海车辆年检过期了怎么办 行驶证过期十天怎么办 行驶证盖章满了怎么办 驾照c证扣12分怎么办 两年小车忘年审怎么办 4年车检过期了怎么办 车检过期了1周怎么办