基于EF 4.3.1 Code First的领域驱动设计实践案例
原文地址:
http://www.cnblogs.com/daxnet/archive/2012/04/16/2452660.html
两年前我在博客中发布了《entityframework之领域驱动设计实践》系列文章,也得到了广大读者朋友的关注,在完成了系列文章的总结之后,也一直没有这部分内容的更新了。现在,entity
framework的稳定版(就是那个stable的版本,不是entity framework
5的beta版本)4.3.1已经逐步应用到各种.net项目中,为了演示entity framework 4.3.1 code
first编程模式以及其它的一些.net技术在领域驱动设计实践上的应用,我重新采用经典的分层架构(也就是类似microsoft
nlayerapp的区别于cqrs的架构)实现了一个案例程序:byteart
retail。在这个案例中,仓储的实现不再采用nhibernate,而是使用的entity framework 4.3.1 code
first。虽然这个案例较为完整地从各方面展示了.net技术在企业级程序中的应用,但entity
framework确实是其亮点之一,因此,我将这篇介绍这个案例的文章也编排在原来的ef系列文章中。
案例概述
byteart retail以笔记本电脑在线销售业务为背景,展示了microsoft.net技术以及领域驱动设计理念在软件设计、架构与实践中的应用。在byteart retail之前,开源社区也有一些领域驱动设计的实践案例,比如microsoft
domain-oriented nlayered application architecture、面向cqrs体系结构模式的tiny library
cqrs等。与这些案例相比,byteart
retail在领域驱动的实践指导方面有一定的相似性和可比性,但它更注重microsoft.net技术与领域驱动设计相结合。比如,byteart
retail案例对基于entity framework 4.3.1版本中code first模式的仓储实现进行了全方位的演示,这样的entity
framework仓储设计,使得领域模型对象能够完全设计为poco对象而不需要依赖任何其它技术框架,因此,在对仓储的选择和使用上,就能够做到“无缝替换”。另一方面,领域模型的设计也更为考究,实体、值对象的设计、聚合的划分等,都与系统业务紧密结合,相对于其它的演示案例更为成熟。从实现的业务逻辑上看,byteart
retail大致实现了以下功能:
-
笔记本电脑商品的浏览
-
客户账户注册和基本信息查询与修改
-
笔记本电脑详细信息查询
-
客户添加笔记本电脑商品到购物篮
-
购物篮商品项目管理
-
从购物篮创建销售订单
-
销售订单的确认与查询
- 销售订单明细查询
案例对以下.net技术和开发技巧进行了演示:
-
microsoft entity framework 4.3.1 code
first
-
asp.net mvc 3
-
wcf
-
microsoft patterns & practices unity
application block
-
使用automapper实现dto与领域对象映射
- t4自动化代码生成
案例下载
请【单击此处】下载本案例的所有源代码和visual studio
2010的解决方案文件。
系统需求
开发环境:visual studio 2010 professional/ultimate with sp1,asp.net
mvc3。其它的程序集引用都在压缩包的packages目录下,因此读者无需上网下载安装其它组件。
安装部署
数据库
byteart retail采用microsoft sql server
2008作为后台数据库。首先,修改byteartretail.services项目下的web.config文件,对数据库链接字符串进行配置:
然后,按照下面“程序启动”部分的描述,启动byteartretail.web项目,此时entity
framework会根据上面的连接字符串创建一个名为byteartretail的数据库。
最后,打开sql server management
studio,执行压缩包中sql目录下的byteartretaildata.sql文件即可将所需的测试数据导入byteartretail数据库中。
说明:这种数据库的部署和初始化方式虽然能够规避“model compatibility cannot be checked because the
database does not contain model
metadata.”的错误,但仍然不是一个很理想的部署方式。在这里我们暂时采用这种方式让案例先运行起来,以后我会找出一个更合理的办法并对这部分内容进行更新。
程序启动
使用visual studio打开解决方案并完成编译,然后在byteartretail.services项目中任选一个.svc文件点击右键,并选择view
in browser选项以启动wcf service;之后,直接运行byteartretail.web项目,即可出现主界面。
设计概要
在此我先将部分设计的类图贴出,以方便读者朋友在查看源代码的过程中参阅。
领域模型
基于entity framework的仓储设计(省略属性与方法)
规约设计
企业应用架构模式参考
本案例大致涉及到了以下企业级应用架构模式,也一并列举于此,供读者朋友们参考,也可以作为学习《patterns of enterprise
application architecture》、《core j2ee patterns》等书籍的参考。
-
domain model
-
unit of work
-
repository
-
data transfer object
-
client session state
-
layer supertype
-
separated interface
-
value object
-
business delegate
-
service locator
- transfer object assembler
总结
热烈欢迎爱好microsoft.net技术以及领域驱动设计的读者朋友对本案例进行深入讨论。有疑问或建议请直接留言回复。