加载中 ...
首页 > 新闻资讯 > 经验心得 正文

领域驱动设计和实践

2019-03-23 07:30:33 来源:沈阳软件公司 作者:沈阳软件开发

弁言

  软件系统面向工具的设计头脑可谓历史悠久,20世纪70年月的Smalltalk可以说是面向工具语言的经典,直到今天我们依然将这门语言视为面向工具语言的基础。随着编程语言和手艺的生长,种种语言特征层出不穷,面向工具是大部门语言的一个基本特征,像C++、Java、C#这样的静态语言,Ruby、Python这样的动态语言都是面向工具的语言。

  可是面向工具语言并不是银弹,若是开发职员以为使用面向工具语言写出来的水平自己就是面向工具的,那就大错特错了。现实开发中,大量的营业逻辑聚集在一个巨型类中的例子司空见惯,代码的复用性和扩展性无法获得保证。为相识决这样的问题,领域驱动设计提出了清晰的分层架构和领域工具的观点,让面向工具的剖析和设计进入了一个新的阶段,对企业级软件开提倡到了庞大的推行动用。

  本文主要先容了领域驱动设计的基本观点、要素、特点,对比了事务剧本和领域模子的特点,最后先容了我们在软件开发历程中的领域驱动设计实践。

  什么是领域驱动设计(DDD)

  2004年著名建模专家Eric Evans揭晓了他最具影响力的书籍:《Domain-Driven Design: Tackling Complexity in the Heart of Software》(中文译名:领域驱动设计:软件焦点庞大性应对之道),书中提出了领域驱动设计(简称 DDD)的观点。

  领域驱动设计事实上是针对OOAD的一个扩展和延伸,DDD基于面向工具剖析与设计手艺,对手艺架构举行了分层计划,同时对每个类举行了计谋和类型的划分。

  领域模子是领域驱动的焦点。接纳DDD的设计头脑,营业逻辑不再集中在几个大型的类上,而是由大量相对小的领域工具(类)组成,这些类具备自己的状态和行为,每个类是相对完整的自力体,并与现实领域的营业工具映射。领域模子就是由这样许多的细粒度的类组成。基于领域驱动的设计,保证了系统的可维护性、扩展性和复用性,在处置惩罚庞大营业逻辑方面有着先天的优势。

  领域驱动设计的特点

  领域驱动的焦点应用场景就是解决庞大营业的设计问题,其特点与这一焦点主题息息相关:

    分层架构与职责划分:领域驱动设计很好的遵照了关注点分散的原则,提出了成熟、清晰的分层架构。同时对领域工具举行了明确的计谋和职责划分,让领域工具和现实天下中的营业形成优秀的映射关系,为领域专家与开发职员搭建了相同的桥梁。复用:在领域驱动设计中,领域工具是焦点,每个领域工具都是一个相对完整的内聚的营业工具形貌,以是可以形成直接的复用。同时设计历程是基于领域工具而不是基于数据库的Schema,以是整个设计也是可以复用的。使用场景:适合具备庞大营业逻辑的软件系统,对软件的可维护性和扩展性要求比力高。不适用简朴的增删改查营业。
  若是不使用DDD?

  面临庞大的营业场景和需求,若是没有建设和实现领域模子,会导致应用架构泛起胖服务层和血虚的领域模子,在这样的架构中,Service层最先积累越来越多的营业逻辑,领域工具则成为只有getter和setter要领的数据载体。这种做法还会导致领域特定营业逻辑和规则散布于多个的Service类中,有些情形下还会泛起重复的逻辑。我们曾经见过5000多行的Service类,上百个要领,代码基本上是不行读的。

  在大多数情形下,血虚的领域模子没有成本效益。它们不会给公司带来逾越其它公司的竞争优势,由于在这种架构里要实现营业需求变换,开发并部署到生产情况中去要破费太长的时间。

  领域驱动设计的分层架构和组成要素

  下面我们简朴先容一下领域驱动设计的分层架构和组成要素,这部门内容在Eric Evans的书中有很是详尽的形貌,想要详细相识的,最好去读原版书籍。

  下面这张图是该书中著名的分层架构图,如下:

  整个架构分为四层,其焦点就是领域层(Domain),所有的营业逻辑应该在领域层实现,详细形貌如下:

用户界面/展现层

卖力向用户展现信息以及诠释用户下令。

应用层 

“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。