文档章节

静下心来,想想为什么领域模型对于架构师如此重要?(学习笔记)

ND小龙
 ND小龙
发布于 2017/09/08 22:20
字数 1143
阅读 48
收藏 0

做任何一个软件系统,都是有原因的,都是要解决特定的问题。

通过问题,我们就知道了我们需要一个什么样的系统,这个系统解决了什么样的问题。

 

两个概念:

“问题空间(Problem Space)”和“解决方案空间(Solution Space)”

 

问题空间,就是当前环境下业务所面临的一系列问题和背后的需求,它属于产品规划阶段,通常是业务或产品领域专家主导进行问题需求收集描述和分析。

 

解决方案空间,则是针对问题空间的解决方案,它思考的是如何设计实现软件系统以解决这些问题,它属于工程设计实施阶段,通常是技术专家主导的解决方案设计和实现。

 

 

在问题空间里,主要是找出某个业务面临的挑战及其相关需求场景用例分析,而解决方案空间里,则通过具体的技术工具手段来进行设计实现。互联网软件从业人员容易理解的一个映射转化过程。

 

两个概念:

领域(Domain) 和 领域模型(Domain Model)也叫业务对象模型

 

“领域”相对于软件系统来说,就是系统要解决的现实问题。因此也可以简单理解一个领域就对应一个问题空间,是一个特定范围边界内的业务需求的总和。

 

“领域模型”则是针对特定领域里的关键事物及其关系的可视化表现。它属于“解决方案空间”,是为了准确定义需要解决问题而构造的抽象模型,为软件系统的构建目标统一认知,是业务功能场景在软件系统里的映射转化。

 

领域模型驱动设计(DDD:Domain-Driven Design

 

经典分层架构

 

  • 将领域模型相关的代码集中到一个层中,把它从用户界面、应用和基础设施代码中分隔开来
  • 释放领域对象的显示自己、保存自己、管理应用任务等职责,让它专注于展现领域模型
  • 复杂的程序切分成层
  • 层中采用内聚的设计
  • 层仅依赖于它底下的那层

 

架构概述

 

详细架构

  • 实体(Entity)
  • 实体就是领域中需要唯一标识的领域概念。实体有生命周期,实体从被创建后可能会被持久化到数据库。

  • 值对象(Value Object)

    在领域中,并不是没一个事物都必须有一个唯一标识,也就是说我们不关心对象是哪个,而只关心对象是什么。

  • 领域服务(Domain Service)

    领域服务是以动词开头来命名的,需要强调的是领域服务是无状态的,它存在的意义就是协调领域对象共完成某个操作,所有的状态还是都保存在相应的领域对象中。

    领域服务可以避免领域逻辑泄露到应用层。引入领域服务可以有效的防治领域层的逻辑泄露到应用层,通过调用领域服务提供的简单易懂但意义明确的接口。

  • 模块
  • 聚合
  • 工厂(Factory)

    DDD中的工厂也是一种体现封装思想的模式。DDD中引入工厂模式的原因是:有时创建一个领域对象是一件比较复杂的事情,不仅仅是简单的new操作。客户传递给工厂一些简单的参数,然后工厂可以在内部创建出一个复杂的领域对象然后返回给客户,简单的调用领域工厂创建出期望的对象。

  • 资源库 或 仓储(Repository)

    仓储分为仓储定义部分和仓储实现部分,在领域模型中定义仓储的接口,从某个类似集合的地方根据某个条件获取一个或一些对象。根据项目中查询的灵活度要求来选择适合的仓储查询接口设计。

 

 

 

 

 

 

 

思考总结

领域建模不是面向技术的一种纯软件设计方法,它是一种思维方式,我们采用它来搭建领域模型。

它体现了系统的核心价值,及能解决的问题及解决的程度。

本文转载自:http://blog.csdn.net/johnstrive/article/details/16805121

共有 人打赏支持
ND小龙
粉丝 10
博文 45
码字总数 2295
作品 0
福州
私信 提问
【读书笔记】 跌跌不休囤代币,自我笃定是根本

读书笔记,在信息爆炸的世界,让我保持一颗不断前进、有序的心。 ——老豹 正文: 来源《价值感知训练营》 出品人:张三九 第八讲:跌跌不休囤代币,自我笃定是根本 经典语句: 大跌就多买一...

老豹心里住着猫
07/21
0
0
同是3年开发经验,为什么你的技术比别人差很多?

你有没有静下心来思考过:同样是做了x年Java开发,为什么你的技术比别人差很多? 其实技术水平的高低和个人智商关系不大(毕竟能做Java编程开发大家都不会差),主要和勤奋程度、提升方法有关...

技术小能手
08/23
0
0
IT人的学习方法论-4 一些重要的能力

/*---------------------------------------- 本系列共7篇文章,目前已经完成如下内容: IT人的学习方法论-1,讨论学习的方向 IT人的学习方法论-2,讨论学习的误区 IT人的学习方法论-3,讨论...

yongyu2000
2009/10/12
0
0
一路孤独走来

我 从很小的时候,就是一个孤独的人,安安静静的学习,安安静静的看电视,安安静静的想着很多事,我想到我的同学问我:“你数学怎么总考那么高的成绩?”我想到在学校里我少有的娱乐就是做数...

big_c_god
2017/06/22
0
0
怎样成长为一个真正的Oracle DBA (转载)

Oracle分两大块,一块是开发,一块是管理。 开发主要是写写存储过程、触发器什么的,还有就是用Oracle的Develop工具做form。有点类似于程序员,需要有较强的逻辑思维和创造能力,个人觉得会比...

y862318
2014/05/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部