首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
SOA 与 DDD
时间:
2016-03-08 02:01:25
阅读:
189
评论:
0
收藏:
0
[点我收藏+]
标签:
SOA是技术架构方面,Evans
DDD
则是哲学方法论方面,所属方向不一样,或者说两者非常的无关。甚至是两个不同方向。使用
DDD
可以将系统从无到有到大建立起来,而大到一定程度,就需要
SOA
,整合异构。如果说
DDD
和
SOA
有什么联系的话,那么组件Componen可能是他们中间的纽带。下面对这几个概念分析如下,不当之处请讨论。
SOA概念
SOA是一个很高的架构,使用EJB这样
分布式
组件以后才会考虑
SOA
,有过DCE (Distributed Computing Environment), CORBA (Common Object Request Broker Architecture), DCOM ( D istributed Component Object Model) 或者EJB/RMI (Remote Method Invocation)等
分布式
架构经验的,过渡到
SOA
是一个很容易的概念,否则,如果没有这样一个可伸缩的架构概念,SOA对于他们则特别难以接受,是一个非常陡峭的学习曲线。
在当前国内很多人以数据库为中心的软件思维,没有认识到数据库的不
伸缩性
,让他们去接受
分布式
组件概念都很难,更别说
SOA
,这也是
SOA
在国内喊那么多年,一直没有大规模应用的原因,
SOA和EJB一样对于一些人非常高端,接受起来不是一蹴而就,也不是我写两篇文章数据库死了就可以接受的了。这是一个整体素质和水平的问题。
一个
SOA
架构如图:
SOA是一个业务重用粒度很高的架构,属于一种粗粒度的服务,ESB是提供这些粗粒度服务之间沟通的一种渠道,ESB是让服务彼此交流通迅,是一种实现松耦合的面向服务的架构。
SOA和Component/EJB
使用EJB作为
SOA
服务实现有很多好处,是一个推荐理想做法,但是,EJB作为一种
分布式
组件技术,还是和
SOA
的服务有些区别。
首先,服务应该是无状态的,而组件component可以有状态,虽然EJB作为
分布式
组件是
SOA
服务最好实现,但是不是所有的组件component都能作为服务的。
其次, 组件component是一种细粒度,而
SOA
的服务是一种粗粒度,组件是为重用而设计的对象,而服务是为更好地
伸缩性
scalability 而设计的,注意,服务是偏重
伸缩性
的,如果说组件还和
DDD
有关,实现
DDD
思想涉及到使用什么样的组件路线,那么
SOA
就已经纯粹是一个完全
伸缩性
概念了。
不要以为使用了EJB就具有良好的可
伸缩性
scalability,分布式计算组件不代表良好的
伸缩性
scalability,因为他们粒度还是太细,粒度太细导致调用过分频繁,加重
分布式
网络负载。
一个业务功能会在很多组件之间来回不断调用,,而
SOA
则是客户端使用一次调用一个服务,解决这一个业务功能,显示简明扼要,一刀封喉,同时也因为性能问题,减少网络来回损耗,SOA提供减轻了的负载,同样的网络环境就能提供更多的功能负载处理,所以
SOA
在
伸缩性
方面要好于EJB或CORBA这些细粒度组件。
组件的细粒度是因为使用Evans
DDD
等对象方法分析设计的结果,组件可以看成是一个打包的多个对象,也可以是一个对象,对象方法论Evans
DDD
建议我们不断分层,可以不止三层,五层甚至更多成,直至最大化松耦合,最后结果必然导致琐碎和粒度非常细腻。而
SOA
则是一个相反过程,需要让我们不断拔高。
SOA和Evans
DDD
上面已经说过,SOA是一个着重功能块的架构,比如天气信息服务、google的查询服务,是粗粒度的,那么是不是使用
SOA
就无需
DDD
,打个比喻:DDD就是把东西切得很碎,而
SOA
则是打包,这两个是否没有关系呢?
我个人认为答案是否定的,如果没有很细腻的松耦合的分离,那么怎么有
SOA
的整块概念呢?碎块和整块本是一对矛盾体的两个方面,互相依赖相对的,如果失去一方,另外一方也就无法存在。
如果没有
DDD
这样
OO
分析设计,如果是围绕数据库分析设计,就很难使用上
SOA
这样的粗粒度又和具体技术无关的高级架构。
如果你没有
OO
细分概念,而是数据库驱动设计概念,那么你就可能会将数据库的CRUD作为服务提供出来,JDBC或Http都不是服务。不能将简单的增删改查这样细粒度服务作为
SOA
的服务,基于CURD以上应该是更复杂的可重用的组件,然后,在组件上面才会使用到
SOA
的服务。SOA是一个很高的概念,需要更高的向上思维。
可以看出:SOA服务是在松耦合组件分离后的再次打包,而Evans
DDD
则是一把切断组件关系的利刃。从这个方面看,DDD应该是更基础平台,万丈高楼平地起啊,而
DDD
是对象方法论集大成,集合分析模式和设计模式,当你掌握
DDD
以后,分布式组件EJB是你攻克的第二关,伸缩性scalability成为你架构习惯思维的一部分以后,才能真正进入
SOA
高端“仙境”。
参考文章:
http://www.theserverside.com/news/thread.tss?thread_id=44639
http://www.jdon.com/jivejdon/thread/34676.html
SOA 与 DDD
标签:
原文地址:http://www.cnblogs.com/duanxz/p/5252485.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!