[.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店

丰富的线上&线下活动,深入探索云世界

做任务,得社区积分和周边

最真实的开发者用云体验

让每位学生受益于普惠算力

让创作激发创新

资深技术专家手把手带教

遇见技术追梦人

技术交流,直击现场

海量开发者使用工具、手册,免费下载

极速、全面、稳定、安全的开源镜像

开发手册、白皮书、案例集等实战精华

为开发者定制的Chrome浏览器插件

从概念上说,领域驱动设计架构主要分为四层,分别为:基础设施层、领域层、应用层和表现层。

实体可以认为对应于数据库的表,而值对象一般定义在实体类中。

下面用一个图来形象展示DDD的分层架构:

本系列介绍的领域驱动设计实战,则自然少了领域驱动设计分层架构的实现了,上面简单介绍了领域驱动的分层架构,接下来将详细介绍在网上书店中各层是如何去实现的。

在应用领域驱动设计的思想来构建一个项目,则第一步就是了解需求,明白项目的业务逻辑,了解清楚业务逻辑后,则把业务逻辑抽象成领域对象,领域对象所放在的位置也就是领域模型层了。该专题介绍的网上书店主要完成了商品所涉及的页面,包括商品首页,单个商品的详细信息等。所以这里涉及的领域实体包括2个,一个是商品类,另外一个就是类别类,因为在商品首页中,需要显示所有商品的类别。在给出领域对象的实现之前,这里需要介绍领域层中所涉及的几个概念。

根据面向接口编程原则,我们在领域模型中应该定义一个实体接口和聚合根接口,而因为聚合根也是属于实体,所以聚合根接口继承于实体接口,而商品类和类别类都是聚合根,所以它们都实现聚合根接口。如果像订单项只是实体不是聚合根的类则实现实体接口。有了上面的分析,则领域模型层的实现也就自然出来了,下面是领域对象的具体实现:

//领域实体接口publicinterfaceIEntity{//当前领域实体的全局唯一标识GuidId{get;}}//聚合根接口,继承于该接口的对象是外部唯一操作的对象publicinterfaceIAggregateRoot:IEntity{}//商品类publicclassProduct:AggregateRoot{publicstringName{get;set;}publicstringDescription{get;set;}publicdecimalUnitPrice{get;set;}publicstringImageUrl{get;set;}publicboolIsNew{get;set;}publicoverridestringToString(){returnName;}}//类别类publicclassCategory:AggregateRoot{publicstringName{get;set;}publicstringDescription{get;set;}publicoverridestringToString(){returnthis.Name;}}另外,领域层除了实现领域对象外,还需要定义仓储接口,而仓储层则是对仓储接口的实现。仓储可以理解为在内存中维护一系列聚合根的集合,而聚合根不可能一直存在于内存中,当它不活动时会被持久化到数据中。而仓储层完成的任务是持久化聚合根对象到数据或从数据库中查询存储的对象来重新创建领域对象。

仓储层有几个需要明确的概念:

//仓储接口publicinterfaceIRepositorywhereTAggregateRoot:class,IAggregateRoot{voidAdd(TAggregateRootaggregateRoot);IEnumerableGetAll();//根据聚合根的ID值,从仓储中读取聚合根TAggregateRootGetByKey(Guidkey);}publicinterfaceIProductRepository:IRepository{IEnumerableGetNewProducts(intcount=0);}publicinterfaceIProductRepository:IRepository{IEnumerableGetNewProducts(intcount=0);}//仓储上下文接口publicinterfaceIRepositoryContext{}这样我们就完成了领域层的搭建了,接下面,我们就需要对领域层中定义的仓储接口进行实现了。我这里将仓储接口的实现单独弄出了一个层,当然你也可以放在基础设施层中的Repositories文件夹中。不过我看很多人都直接拎出来的。我这里也是直接作为一个层。

定义完仓储接口之后,接下来就是在仓储层实现这些接口,完成领域对象的序列化。首先是产品仓储的实现:

publicsealedclassOnlineStoreDbContext:DbContext{#regionCtorpublicOnlineStoreDbContext():base("OnlineStore"){this.Configuration.AutoDetectChangesEnabled=true;this.Configuration.LazyLoadingEnabled=true;}#endregion#regionPublicPropertiespublicDbSetProducts{get{returnthis.Set();}}publicDbSetCategories{get{returnthis.Set();}}//后面会继续添加属性,针对每个聚合根都会定义一个DbSet的属性//...#endregion}接下来就是IEntityFrameworkRepositoryContext接口的定义以及它的实现了。具体代码如下所示:

publicinterfaceIEntityFrameworkRepositoryContext:IRepositoryContext{#regionPropertiesOnlineStoreDbContextDbContex{get;}#endregion}publicclassEntityFrameworkRepositoryContext:IEntityFrameworkRepositoryContext{//引用我们定义的OnlineStoreDbContext类对象publicOnlineStoreDbContextDbContex{get{returnnewOnlineStoreDbContext();}}}这样,我们的仓储层也就完成了。接下来就是应用层的实现。

应用层应用了面向服务结构进行实现,采用了微软面向服务的实现WCF来完成的。网上书店的整个架构完全遵循着领域驱动设计的分层架构,用户通过UI层(这里实现的是Web页面)来进行操作,然后UI层调用应用层来把服务进行分发,通过调用基础设施层中仓储实现来对领域对象进行持久化和重建。这里应用层主要采用WCF来实现的,其中引用了仓储接口。针对服务而言,首先就需要定义服务契约了,这里我把服务契约的定义单独放在了一个服务契约层,当然你也可以在应用层中创建一个服务契约文件夹。首先就去看看服务契约的定义:

//商品服务契约的定义[ServiceContract(Namespace="")]publicinterfaceIProductService{#regionMethods//获得所有商品的契约方法[OperationContract]IEnumerableGetProducts();//获得新上市的商品的契约方法[OperationContract]IEnumerableGetNewProducts(intcount);//获得所有类别的契约方法[OperationContract]IEnumerableGetCategories();//根据商品Id来获得商品的契约方法[OperationContract]ProductGetProductById(Guidid);#endregion}ViewCode接下来就是服务契约的实现,服务契约的实现我放在应用层中,具体的实现代码如下所示:

//商品服务的实现publicclassProductServiceImp:IProductService{#regionPrivateFieldsprivatereadonlyIProductRepository_productRepository;privatereadonlyICategoryRepository_categoryRepository;#endregion#regionCtorpublicProductServiceImp(IProductRepositoryproductRepository,ICategoryRepositorycategoryRepository){_categoryRepository=categoryRepository;_productRepository=productRepository;}#endregion#regionIProductServiceMemberspublicIEnumerableGetProducts(){return_productRepository.GetAll();}publicIEnumerableGetNewProducts(intcount){return_productRepository.GetNewProducts(count);}publicIEnumerableGetCategories(){return_categoryRepository.GetAll();}publicProductGetProductById(Guidid){varproduct=_productRepository.GetByKey(id);returnproduct;}#endregion}ViewCode最后就是创建WCF服务来调用服务契约实现了。创建一个后缀为.svc的WCF服务文件,WCF服务的具体实现如下所示:

另外,在这里使用了Unity依赖注入容器来对接口进行注入。主要的配置文件如下所示:

最后附上整个解决方案的结构图:

实现完之后,大家是不是都已经迫不及待地想看到网上书店的运行效果呢?下面就为大家来揭晓,目前网上书店主要包括2个页面,一个是商品首页的展示和商品详细信息的展示。首先看下商品首页的样子吧:

图书的详细信息页面:

到这里,本专题的内容就介绍完了,本专题主要介绍面向领域驱动设计的分层架构和面向服务架构。然后结合它们在网上书店中进行实战演练。在后面的专题中我会在该项目中一直进行完善,从而形成一个完整了DDD案例。在接下来的专题会对仓储的实现应用规约模式,在应用之前,我会先写一个专题来介绍规约模式来作为一个准备工作。

THE END
1.电商网站数据库设计全解析构建高效数据管理系统的关键要素关系型随着网络购物的普及,电商网站如雨后春笋般涌现,如何在这片竞争激烈的市场中脱颖而出,成为了每一个电商企业的当务之急。而一个高效的数据管理系统则是支撑电商平台正常运作的基石。数据库设计不仅关乎数据的存储与管理,更直接影响到用户体验、运营效率和企业决策的精准度。 https://www.163.com/dy/article/JIVB9IDF05569BV4.html
2.网上书店管理系统数据库系统设计数据库系统设 课程设计报告 大学课程设计 需积分: 50168 浏览量2019-04-10上传1.05MBDOC 《数据库原理及应用》 课程设计报告 题目:网上书店管理系统 专业: 班级: 姓名: 指导教 师: 成绩: 学号 剩余32页未读,继续阅读 三两光阴七寸执念 粉丝: 86 https://download.csdn.net/download/sanliangguangyin/11102940
3.网上书店分析设计报告范文6篇(全文)为了便于测试所开发的Reading系统,系统开发小组应该输入各30册以上的英语图书和计算机图书到系统中。 网上书店系统运行在Windows XP平台之上,所选用的数据库是Access或SQL Server;交互网页技术可以采用ASP技术(微软方案)或JSP技术(Java方案)或PHP技术。 1.3 术语定义 https://www.99xueshu.com/a/Vvr8gya3pe8j.html
4.mysql实验网上书店数据库中数据表的创建网上书店sql数据库设计结合实际,我选择了相对比较熟悉的书店作为我的设计对象,根据网上查阅和询问,我得知了书店的一些日常的工作和数据的内容和类型,于是我进行了需求分析,并制定了E-R模型,来分析了数据库的设计样式和需求。 二. 需求分析 根据书店的需求,书店的日常,主要分为四种情况: 进货:每一本图书,都有着图书类型,图书价格,图书https://blog.51cto.com/u_16099179/10429942
5.网上书店管理信息系统数据库课程设计,网上书店管理信息系统为了让您在写《网上书店管理信息系统-数据库课程设计》时更加简单方便,下面是小编整理的《网上书店管理信息系统-数据库课程设计》,仅供参考,大家一起来看看《网上书店管理信息系统-数据库课程设计》吧 第一章概述目前社会上信息管理系统发展飞速,越来越多的企事业单位都引入了信息管理软件来管理自己日益增长的各种信息https://easylearn.baidu.com/edu-page/tiangong/composition?id=aececdfecdcae1746967836314765899&fr=search
6.网上书店——数据字典部分系统设计 (5) 2.1 数据库设计 (5) 2.1.1 概念结构设计 (5) 2.1.2 逻辑结构设计 (7) 2.2 系统物理设计 (10) 1 1 系统需求分析 1.1 系统基本功能描述 网上书店系统是依据网上书店能够在线出售图书和管理需求而进行设计的,目的是实现在线接受客户订单、书店信息管理的功能。 需要在线购买图书的客户能够通过网上https://m.360docs.net/doc/611913175.html
7.原创网上书店销售管理系统课程设计报告图6-1 网上书店销售系统总体E-R图 七、逻辑数据库设计 (1) 用户(user)表:由用户(user)实体集转化而来。 图7-1 用户user表 (2)书籍(book)表:由书籍(book)实体集转化而来 图7-2 书籍book表 (3)订单(order)表:由订单实体集转化而来。 图7-3 订单order表 https://www.jianshu.com/p/e6167aff52ef
8.Java实战之网上书店管理系统的实现javaSystem.out.println("数据库连接失败"); } } } 以上就是Java实战之网上书店管理系统的实现的详细内容,更多关于Java书店管理系统的资料请关注脚本之家其它相关文章! 您可能感兴趣的文章: Java设计模块系列之书店管理系统单机版(三) Java设计模块系列之书店管理系统单机版(二) Java设计模块系列之书店管理系统单机版(https://www.jb51.net/article/250714.htm
9.基于PHP的汉唐网上书店的设计与实现在总体设计和LNMP技术的基础上,对用户浏览、注册、登陆、书籍搜索、查看订单等功能等操作进行了实现。 最后,在Nginx服务器下实现SSL,保证系统的安全性。 机构: 电子科技大学; 领域: 互联网技术; 关键词: 网上书店; Nginx;FastCGI;PHP;MySQL数据库; 3820查看目录 开通会员更优惠,尊享更多权益 下载CAJ版(1302K)https://wap.cnki.net/touch/web/Dissertation/Article/1011193211.nh.html
10.网上书店开题报告7篇指导教师意见(对课题设计(研究)内容的深度、广度及设计(研究)方案的意见和对毕业设计(论文)结果的预测等)X X同学的“基于J2EE的文理书店网的设计与实现”课题从开发意义、开发目的、设计内容和设计方案等方面进行了广泛细致的思考。其设计内容涉及JavaEE技术、MySQL数据库开发、网页编程等多个方面,其深度、广度符合本https://www.ruiwen.com/kaitibaogao/5441829.html
11.基于DAO模式的Hibernate框架在JavaWeb开发中的应用AET1.4 例程数据库设计 在本文设计的网上书店系统中,其数据库中共有五张表: (1)bookinfo表,存储书籍相关信息。创建该表的Oracle语句如下: CREATE TABLE bookinfo( id number(10) NOT NULL,//书籍ID bookName varchar(128)default′′,//书名 isbn varchar(64)default ′′,//序列号 writer varchar(45)NOT NULLhttp://www.chinaaet.com/article/3000016946
12.网上书城写毕业设计毕业设计网写毕业设计程序定制此系统主要的功能是帮助经营实物书店的人们扩大市场和增加知名度。基本功能包括用户注册、用户登录、新书籍展示、书籍检索、二手书籍展示、远程购买、远程交易等。系统开发工具是使用JSP及SQL Server数据库,系统是基于出版社等会员背景开发的,可以有效的实现网上书籍交易。http://www.taolw.com/a/7254.html
13.jsp课程设计篇5:jsp课程设计 电子商务网站开发--小型网上书店课程设计(JSP)其中包括的详细需求、业务分析、数据库、源代码 我们使用JSP和Java Bean来构建一个网上书店。介绍的例子可以分成两大部分,第一部分是普通程序,用于客户在网上选购图书,第二部分是管理程序,用于在服务器端处理客户的定单。客户端程序由以下几个部分构成:https://www.360wenmi.com/f/fileri37m6dp.html
14.电子工业出版社项目六、项目七主要讲解PHP与MySQL数据库交互。项目八至项目十通过综合案例分别实现用户登录、用户注册及课程管理系统动态网页设计。 查看更多 > 图书评论 暂无评论 发表图书评论 评论标题: 评论内容: 验证码: 看不清楚点击刷新 您还没有登录,请登录后再评论。点击“登录” 购买过本书的顾客还买过 电子技术https://www.phei.com.cn/module/goods/wssd_content.jsp?bookid=64019
15.电子商务网站建设包括第1~3章,主要介绍了电子商务网站的基本概念、电子商务网站建设的工具、网站的规划与设计、网站服务器方案的选择及建站流程。 第2篇为基本建站技术。包括第4~9章,内容包括HTML语言、Dreamweaver设计网页的基本操作、VBScript脚本语言和数据库基础的简要介绍,以及ASP的内置对象,最后以网上书店为例介绍了电子商务网站https://baike.sogou.com/v5852534.htm
16.清华大学出版社图书详情本书共10个教学单元,包括数据库设计概述,MySQL的安装与配置,数据库和表的基本操作,表数据的增、删、改操作,表记录的检索,索引和视图,存储过程与触发器,事务与锁机制,数据库高级管理,银行业务系统数据库的设计与实现等内容。 本书以教务管理系统作为教学项目,以“网上书店”数据库作为单元实训项目,采用“学习要点—http://www.tup.tsinghua.edu.cn/bookscenter/book_09255701.html