`

领域驱动设计之入门级教程(下)

阅读更多

  在我们创建软件的时候,有很多的功能是和要解决的业务领域没有关系的,他们是软件的基础部件,或者是为软件服务的。例如:权限、日志、数据访问、文件访问、网络访问、用户界面等。最好将这部分功能从业务领域分离开来,独立出来,因为这部分功能是相对稳定的,这样既保证了这部分的独立性,便于升级维护,不至于影响业务领域的功能实现,同时将业务功能,业务规则尽可能放在业务逻辑处理层。这样在以后如果修改业务逻辑,不至于需要修改基础部件,或者是修改散落在各处的业务逻辑代码。

  还有一点好处就是利于自动化测试。可以对独立的模块进行自动化测试,以后修改模块或者重构模块,只要将模块对应的测试脚本跑一遍,没有问题的话,就说明修改或者重构是正确的,就可以集成到系统中。

  因此,分层就是这个作用。将不同关注点的功能独立在一个层中,保证层的内聚性,每一层只依赖它下面的一层,减少耦合和依赖。

  一个通用的领域驱动设计的架构性解决方案通常包含四层:

  •   用户界面层,负责用户界面的展示。
  •   应用层,处理用户的输入。
  •   领域层,包含领域的信息,业务的核心所在,业务对象的持久化交给下面的基础设施层。
  •   基础设施层,作为其他层的支撑存在。

  将应用划分为独立的层,并建立层之间的交换规则,也即是层的接口,是相当重要的。

  模块,一提起模块就好像进行面向过程开发时候的概念。其实在面向对象中,这个概念也是适用的。可以考虑先划分模块,保持模块的独立性,方便部署和重构,然后在每一个模块中应用分层的设计,便于层的升级和维护。最大限度的保持系统的可扩展性。

  领域驱动设计使得我们可以一直专注于用户的业务领域,不至于偏离方向,应该说是一个永不过时的指导原则。

 

  

分享到:
评论

相关推荐

    《Android UI设计》PDF

    许多开发人员需要一本Android UI设计入门级教程,其能够同时针对移动UI的设计模式和碎片化解决方案进行深入分析。 《Android UI设计》面向创建移动应用的产品经理、设计师和开发者,系统讲解了从事Android UI设计...

    嵌入式Linux应用程序开发标准教程(第2版全)

     《嵌入式Linux应用程序开发标准教程(第2版)》可作为高等院校电子类、电气类、控制类等专业高年级本科生、研究生学习嵌入式Linux的教材,也可供希望转入嵌入式领域的科研和工程技术人员参考使用,还可作为嵌入式...

    新版Android开发教程.rar

    谷歌早在 2002 年就进入了移动领域,可是由于目前的手机操作系统企业和手机企业相对封闭,提高了 行业的进入门槛,移动互联网的发展远没有拥有统一标准的传统互联网发展迅速,此次推出的开源手机操 作 系统平台就是...

    windows环境下32位汇编语言程序设计

    在DOS时代,学习汇编就是学习系统底层编程的代名词,仅要成为一名入门级的汇编程序员,就需要学习从CPU结构、CPU工作方式、各种硬件的编程方法到DOS工作方式等范围很广的知识。随着Windows时代的到来,Windows像一堵...

    ASP.NET Boilerplate:一个网络应用程序框架-开源

    提供基于领域驱动设计的分层架构模型。 设计为模块化和可扩展的。 提供基础设施来构建你自己的模块。 SaaS 应用程序变得简单! 从数据库到 UI 的集成多租户。 在设计和开发 DDD 时考虑到了这一点。 为您的应用程序...

    java源码编辑-drools:Drools是用Java语言编写的开放源码规则引擎,使用Rete算法对所编写的规则求值。Drools允许使用声

    领域驱动设计 中间件开发 JavaAgent 架构框架搭建 :hot_beverage: Java基础编程 :laptop: 用Java实现jvm虚拟机 :pencil: Spring系列源码解读 :speaker_medium_volume: Netty4.x专题 基础入门篇 中级拓展篇 高级应用...

    ROS机器人操作系统入门 Tutorials CN版 20150726

    ROS的首要设计目标是在机器人研发领域提高代码复用率。ROS是一种分布式处理框架(又名Nodes)。这使可执行文件能被单独设计,并且在运行时松散耦合。这些过程可以封装到数据包(Packages)和堆栈(Stacks)中,以...

    asp.net知识库

    深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托...

    contributing to eclipse ~.part1

    本书为读者提供了:  一个快速入门教程。在一个小时之内让你的第一个插件运行起来。测试驱动插件开发方法的简介。使读者充满自信地创建高质量的插件。Eclipse的社群法则。掌握这些法则,你的插件方可天衣无缝地...

    contributing to eclipse ~.part2

    本书为读者提供了:  一个快速入门教程。在一个小时之内让你的第一个插件运行起来。测试驱动插件开发方法的简介。使读者充满自信地创建高质量的插件。Eclipse的社群法则。掌握这些法则,你的插件方可天衣无缝地...

    contributing to eclipse ~.part3

    简介 · · · · · ·  本书为读者提供了:  一个快速入门教程。在一个小时之内让你的第一个插件运行起来。测试驱动插件开发方法的简介。使读者充满自信地创建高质量的插件。Eclipse的社群法则。掌握这些...

    contributing to eclipse ~.part4

    简介 · · · · · ·  本书为读者提供了:  一个快速入门教程。在一个小时之内让你的第一个插件运行起来。测试驱动插件开发方法的简介。使读者充满自信地创建高质量的插件。Eclipse的社群法则。掌握这些...

    c语言编写单片机技巧

    C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言...

    自己动手写操作系统(含源代码).part2

    本书尤其适合作为你的引路书籍,因为它翔实地介绍了初学者入门时所必需的知识积累,而这些知识在《操作系统:设计与实现》一书中是没有涉及的,笔者本人是把这本书作为写操作系统的主要参考书籍之一,所以在本书中对...

    自己动手写操作系统(含源代码).part1

    本书尤其适合作为你的引路书籍,因为它翔实地介绍了初学者入门时所必需的知识积累,而这些知识在《操作系统:设计与实现》一书中是没有涉及的,笔者本人是把这本书作为写操作系统的主要参考书籍之一,所以在本书中对...

Global site tag (gtag.js) - Google Analytics