文档章节

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

ND小龙
 ND小龙
发布于 2017/09/08 22:20
字数 1143
阅读 47
收藏 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
福州
Leslie G. Valiant获得2010年图灵奖

因其在计算学习理论及广泛的计算机科学领域里作出的重大贡献,Leslie G. Valiant获得2010年ACM图灵奖。Valiant教授目前在哈佛大学工程与应用科学学院教授计算机科学和应用数学的课程。他在过...

二胡
2011/03/21
1K
1
《我们应当怎样做需求分析》阅读笔记

原文链接(转载请注明出处):如何做好需求分析 这学期的《软件需求与分析》课可以说是软件工程专业比较重要的一门课。如何做好软件需求分析就等同于如何做好一个项目。客户对需求一改再改,...

dmego
2017/09/29
0
0
【读书笔记】 跌跌不休囤代币,自我笃定是根本

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

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

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

技术小能手
08/23
0
0
软件开发杂谈 001

1. 软件架构设计可以基于数据库的模型设计也可以基于领域模型设计。对于业务系统来说,如果他的核心是数据处理和分析,而且数据量很大可以在架构设计时采用基于数据库建模的方式,对于一些中...

青夜之衫
2017/12/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java序列化(四) - 实现Externalnalizable接口

实现Externalnalizable接口 实现Externalnalizable接口 package meng.springboot.demo.obj;import java.io.Externalizable;import java.io.IOException;import java.io.ObjectInput......

晨猫
26分钟前
0
0
php 日志库获取调用方的代码文件地址和代码行数

在使用其他语言的打印日志的时候,经常能看到打印日志时带上文件地址和代码行数,对于调试和查找问题非常方便,但是 php 日志库里则很少见到这个功能,但这个功能还是可以实现的。 关键点就是...

anoty
32分钟前
7
0
Android Studio如何批量导入全部包import

当需要导包时,Android Studio有单个导包快捷键 Alt+Enter 但是没有全部的包 但是可以在设置里设置Auto Import自动导入功能

lanyu96
33分钟前
0
0
六款优秀的 Linux 基准测试工具

基准测试是指运行计算机程序去评估硬件和软件性能的行为。硬件基本测试包括评估处理器,内存,显卡,硬盘,网络等不同组件的性能。基准测试有两类: 复合和应用。复合基准对一个硬件执行压力...

openthings
35分钟前
2
0
什么是阿里云容器服务?

关于阿里云容器服务的详细内容:阿里云容器服务使用教程 容器服务(Container Service)提供高性能可伸缩的容器应用管理服务,支持用 Docker 容器进行应用生命周期管理,提供多种应用发布方式...

mcy0425
36分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部