`
oywl2008
  • 浏览: 990747 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

结合领域驱动设计的SOA分布式软件架构

 
阅读更多

引言

本文主要是参考Martion Fowler所著的《企业应用架构模式》与Eric Evans所著的《领域驱动设计》这两本泰山之作,加上本人在近年实际的工作过程中开发SOA系统所认识到的问题所写的一篇文章,欢迎各位点评。
最后两节  细说应用层 、系统总体架构 是本文的重点,着重说明领域驱动设计与SOA之间的关系,对DDD有一定基础的朋友可以越过前面的几节,直接查看第七、八节。

源代码下载 (数据库可以在.edmx文件根据模型生成)

 

目录

一、SOA与DDD的定义

二、DDD的分层结构

三、把业务关系转化为领域模型

四、细说Repository

五、领域层的服务

六、工厂模式Factory

七、细说应用层

八、系统总体架构 

 

 

一、SOA与DDD的定义

SOA与DDD都是常用的系统架构,但两者之间所针对的核心是不同的。

SOA(面向服务架构)由Gartner 在1996年提出来,它是一种分布式的软件架构,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行部署、组合和使用。简单来说,SOA就是一种大型系统开发的体系架构,在基于SOA架构的系统中,具体应用程序的功能是由一些松耦合并且具有统一接口的组件(也就是service)组合构建起来的,它是针对多核心多平台之间的数据交换。

DDD(领域驱动设计)由Eric Evans在2004提出,它的核心内容是“如何将业务领域概念映射到软件工程当中”。它推翻了“软件从数据层开发设计”的旧习惯,强调领域模型在软件中发挥的强大力量,注重如何把企业内部复杂的业务流程转化为软件。

也许可以认为SOA针对的是大型系统的总体架构,注重如何把系统进行项目分离,隔离开发,最后实现系统合并。而DDD是针对单个项目的开发管理过程,注重如何利用领域模型把业务需求转化为软件。两者之间并没有存在理论上的冲突,能把两者结合,各展所长,更能发挥各自的优势。

回到目录

二、DDD的分层结构

1. 概念

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

基础结构层:是为各层提供各项通用技术能力而构建的,它可以为领域层提供像Hibernate、LINQ、ADO.NET等持久化机制,为应用层传递消息,为表现层提供插件等等。

领域层:它是系统的核心部分,代表业务的逻辑概念。它会根据业务的实际流程定制了业务信息以及业务规则,并按一定的关系制定领域模型。领域模型尽管需要依赖基础结构层进行保存,但领域模型之间的逻辑关系是跟基础结构层相隔离的。即使基础结构层从NHibernate技术转换成LINQ技术,也不会影响到领域层的结构。领域模型只会依赖实际的业务逻辑,它只会根据业务的转变而灵活变动。

应用层:它的任务是协调领域层与表现层之间的关系,也可以作为系统与外界沟通的桥梁,在这层里面不会包括任何的业务逻辑。在SOA面向服务架构,这一层起着重要的作用,在第七节将详细说明

表现层:它是常用的界面开发,可以以页面(ASP.NET、JSP),窗口(WinForm、WPF、Swing)等形式表现,它的主要职责是负责与用户进行信息沟通。(注意:在一般的项目开发中,Web服务会作为与外界通讯的接口放置在表现层中,但在SOA中,Web服务会大多置于应用层中,下面将会作进一步解释)

 

2. 开发实例

在此先举个常见的订单管理例子,在下面的章节里都会以这个实例为参考

每个用户在Person表里面都会有一个对应的帐户,里面记录了用户的姓名、地址、电话、积分(Point)等基本信息。

在Order表里记录的是每次交易的过程,每次商品的送货费(Freightage)为10元,当商品价格(Price)超过98元可免费送货,当用户Person积分(Point)超过2000分可获7折优惠(Favorable),1000~2000分可获8折,1000分以下可有9折,最后总体价格为为(TotalPrice)。

在最后结单的时候Order表里会产生订单号码OrderNumber和下订日期Delivery,Person表的积分也会加上订单总价的点数。

最后OrderItem表包含了物品Goods、物品价格Price、购买数量Count等属性,它主要记录每次订单的详细交易状况。

上面的业务逻辑跟淘宝、当当等等大型购物网基本相似。之所以用这样一个例子作为参考,是想表现一下DDD是如果利用领域模型去适应多变的业务逻辑关系

分享到:
评论

相关推荐

    SOA实践指南-分布式系统设计的艺术.pdf

     12.2 领域驱动的版本划分  12.3 数据类型的版本划分  12.4 配置管理驱动的版本划分  12.5 实践中的版本划分  12.6 总结 第13章:soa和性能  13.1 性能在哪儿重要  13.2 从远程存储过程到服务  13.3...

    SOA实践指南 分布式系统设计的艺术.part3

     12.2 领域驱动的版本划分  12.3 数据类型的版本划分  12.4 配置管理驱动的版本划分  12.5 实践中的版本划分  12.6 总结 第13章:soa和性能  13.1 性能在哪儿重要  13.2 从远程存储过程到服务  13.3...

    微服务架构设计基础之领域驱动设计

    微服务现在可以说是软件研发领域无人不提的话题,然而业界流行的对比多数都是所谓的Monolithic(单体应用),而大量的系统在十几年前都已经是以SOA(面向服务架构)为基础的分布式系统

    SOA实践指南 分布式系统设计的艺术

     12.2 领域驱动的版本划分  12.3 数据类型的版本划分  12.4 配置管理驱动的版本划分  12.5 实践中的版本划分  12.6 总结 第13章:soa和性能  13.1 性能在哪儿重要  13.2 从远程存储过程到服务  13.3...

    SOA实践指南 分布式系统设计的艺术.part2

     12.2 领域驱动的版本划分  12.3 数据类型的版本划分  12.4 配置管理驱动的版本划分  12.5 实践中的版本划分  12.6 总结 第13章:soa和性能  13.1 性能在哪儿重要  13.2 从远程存储过程到服务  13.3...

    领域驱动设计与模式实战

    1.3.2 领域驱动设计 1.3.3 测试驱动开发 1.3.4 重构 1.3.5 选择一种还是选择组合 1.4 持续集成 1.4.1 解决方案(或至少是正确方向上的一大步) 1.4.2 从我的组织汲取的教训 1.4.3 更多信息 1.5 不要忘记运行机制 ...

    Java思维导图xmind文件+导出图片

    领域驱动设计及业务驱动规划 分布式架构的基本理论CAP、BASE以及其应用 什么是分布式架构下的高可用设计 构架高性能的分布式架构 构建分布式架构最重要因素 CDN静态文件访问 分布式存储 分布式搜索引擎 ...

    beauty of architecture

    领域驱动建模 从资源,服务到产品建模 延伸阅读 行业业务架构模型 3.云计算与SOA 3.1关于去IOE 老外谈去IOE,最终可能会回到IOE的怀抱 谈谈去 IOE 运动 Go to IOE,to go or not to go 3.2 云计算架构 ...

    asp.net知识库

    .NET的反射在软件设计上的应用 关于跨程序集的反射 实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的...

Global site tag (gtag.js) - Google Analytics