• EntityFramework之领域驱动设计实践【后续篇】:基于EF 4.3.1 Code First的领域驱动设计实践案例


    两年前我在博客中发布了《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技术以及领域驱动设计理念在软件设计、架构与实践中image的应用。在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大致实现了以下功能:

    1. 笔记本电脑商品的浏览
    2. 客户账户注册和基本信息查询与修改
    3. 笔记本电脑详细信息查询
    4. 客户添加笔记本电脑商品到购物篮
    5. 购物篮商品项目管理
    6. 从购物篮创建销售订单
    7. 销售订单的确认与查询
    8. 销售订单明细查询

    案例对以下.NET技术和开发技巧进行了演示:

    1. Microsoft Entity Framework 4.3.1 Code First
    2. ASP.NET MVC 3
    3. WCF
    4. Microsoft Patterns & Practices Unity Application Block
    5. 使用AutoMapper实现DTO与领域对象映射
    6. 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文件,对数据库链接字符串进行配置:

    image

    然后,按照下面“程序启动”部分的描述,启动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》等书籍的参考。

    总结

    热烈欢迎爱好Microsoft.NET技术以及领域驱动设计的读者朋友对本案例进行深入讨论。有疑问或建议请直接留言回复。

  • 相关阅读:
    switch语句相关
    大根堆的创建过程
    总结Java中线程的状态及多线程的实现方式
    用直接路径(direct-path)insert提升性能的两种方法
    Oracle的日志记录模式
    针对WebLogic Server 12.1.3版本打补丁
    Oracle Service Bus中的线程
    简化调用Web Service
    网络知识收集
    WebLogic MBean Monitor
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2455870.html
Copyright © 2020-2023  润新知