- 浏览: 592253 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (300)
- Web前端 (27)
- Java疑难 (60)
- 面试 (59)
- 汇编语言 (1)
- 计算机组成原理 (2)
- 操作系统 (3)
- 计算机网络 (6)
- C/C++疑难 (9)
- SSH (2)
- Web开发 (15)
- 故障 (3)
- 软件开发 (16)
- Portal开发 (1)
- 后台开发 (6)
- 数据库 (35)
- 设计模式 (4)
- 数据结构与算法 (4)
- Linux (3)
- 项目管理 (10)
- 多线程 (12)
- 嵌入式 (9)
- 网络编程 (4)
- 架构设计 (20)
- 软件工具技巧 (7)
- 并行并发 (4)
- 窗口编程 (7)
- 串口编程 (0)
- Flex (2)
- 协议 (1)
- 通讯方式 (4)
- 性能分析优化 (5)
- 测试相关 (4)
- 海量数据处理 (2)
- JAVA核心技术 (10)
- SOA (3)
- 攻略规划 (1)
- 爬虫/搜索 (2)
- 正则表达式 (1)
- A Comparison Of NoSQL Database Management Systems And Models (1)
最新评论
-
charles751:
分析的很好!但有一点:只要同步组合操作就可以了,不一定非要sy ...
Vector 是线程安全的? -
S346618898:
core Java中有一段:Vector类对自己的所有可修改方 ...
Vector 是线程安全的? -
code_cj:
基本上明白了.但执行顺是否应该是/etc/profile -& ...
profile bashrc bash_profile之间的区别和联系 -
xd2008ck:
各自有各自的场景吧楼主不要太激进了
Vector 是线程安全的? -
zwt2001267:
写的不错,赞一个
Vector 是线程安全的?
摘自http://www.jdon.com/jdonframework/dci.html
DDD是领域驱动设计(Domain-Driven Design )的简称,DDD是一种分析设计建模方法,它倡导统一语言,提出了实体和值对象 以及聚合根等概念,借助DDD我们能够在结构理清需求中领域模型。DDD专题。
DCI: Data数据模型, Context上下文或场景, Interactions交互行为是一种新的编程范式,由MVC发明人Trygve Reenskaug提出。 DCI架构是什么?
DCI的关键是:
1. 要让核心模型非常瘦.
2. 逻辑或行为应该放在角色这个类中
Event Sourcing是由Martin Fowler提出,是将业务领域精髓(尤其是最复杂的)与技术平台的复杂性实现脱钩的天作之合。为什么要用Event Sourcing? 或 Domain Events – 救世主
下面我们将演示如何将上述三者在实践中结合在一起?
以机器人Robot这个需求为案例,下图是Robot描述,我们根据这种图通过DDD建模。
从上面这张图中,我们根据DDD的实体聚合根等定义,得出如下类图:
可见,Robot作为一个聚合集合的根实体,它有四个重要部分组成,这些组成部分与Robot形成一种高凝聚的组合关系。缺一不可。
有了这样的结构关系,我们还将细化方法行为,根据 对象的责任与职责 ,也就是职责驱动开发方法论,它提出一种角色职责的模型:roles-and-responsibilities ,见Object Design: Roles, Responsibilities, and Collaborations) ,什么是职责呢?职责就是那些knowing what; doing what; deciding what.
那么Robot如果作为一个智能机器人,它应该有哪些职责呢?
Robot的职责功能是能听,能看或能感觉,听 看 感觉这些都是其作为一个智能机器人角色的职责。
那么,下一步关键是,如何实现这些职责呢?是否是将这些职责设计作为Robot实体类的方法呢?如下:
这样设计以后,可能会导致Robot实体类非常臃肿,是一个庞大的对象,这有违背DCI要旨。
DCI认为要保持模型的精简,听 看 感觉这些行为是Robot作为一个智能机器人,不是普通机器人,这样一个特殊角色具备的职责,应此,应该将这些行为放入一个叫智能机器人的角色中。当在运 行时需要的场景context时,我们将这个角色中的职责行为注入到精简的数据模型中,如下图:
这样的例子很多,一个人在家是父亲,在单位是经理,父亲和经理都是角色,是不是要将这些角色行为比如签字 烧菜这些和具体业务场景有关的职责放入“人”这个类中呢?显然不是。
又比如银行账户Account有三种角色:两个是设计角色 BankAccount银行账户 和FinancialAsset理财账户, 另外一个角色是技术角色,它又是EJB的实体Bean专门用来实现持久化保存。
那么如何将上面DCI设计或职责驱动落实为代码呢?特别是Robot实体类和角色智能机器人的行为如何在运行时场景结合呢?这非常类似桥模式:
public String hello(String id) { |
类似Account的实体持久化角色,,
Robot也有一个保存自己到数据库的技术职责,Robot保存自己应该是首先由自己发出这样意愿,而不是被保存,是主动保存,其次保存数据库这个动作耗
时,影响性能,因此,我们使用领域事件Domain Events来间接实现。
一个PublisherRole是保存事件发送者 Robot可以扮演这样一个角色发出保存事件。:
@Introduce("message") |
保存事件的接受方就是DDD中定义的仓储Respository:
@Component |
那么 Robot在什么时候扮演事件发送者发出保存自己的命令呢?可以在任何时候,下面是一个context:
public void save(Robot robot) { |
至此,我们通过机器人Robot案例展示了DDD DCI和事件模型等分析设计实现的过程,当然复杂项目将比这个过程更加复杂,需要敏捷迭代,精炼出符合客观规律的核心模型。
以上Robot实现源代码下载:bot.zip
发表评论
-
抽象类与接口选择
2013-12-06 00:20 846从设计理念层面看 abst ... -
深入浅出单实例Singleton设计模式
2013-09-11 00:14 715前序 单实例Singleton设计模式可能是被讨论和使用的 ... -
一些软件设计的原则
2013-09-11 00:12 684摘自http://coolshell.cn/arti ... -
API设计:用流畅接口构造内部DSL
2013-09-05 18:29 985摘自http://coolshell.cn/art ... -
性能调优攻略
2013-08-29 00:12 843转载自http://coolshell.cn/a ... -
软件级负载均衡器(LVS/HAProxy/Nginx)的特点和对比
2013-05-17 11:11 766现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升 ... -
大型网站架构演变和知识体系
2013-05-13 11:39 907源自http://www.blogjava.net/ ... -
webservice通信原理
2013-05-13 11:17 1072当前,WebService是一个热 ... -
为什么要使用EJB?
2013-04-23 10:17 481源于http://www.jdon.com/arti ... -
分布式Web服务器架构
2013-04-15 09:52 870最开始,由于某些想法 ... -
分布式架构关键技术
2013-04-15 09:51 1299分布式的概念 所谓分 ... -
海量数据处理系列(二)系统过载保护
2013-04-03 17:47 1435前言:前段时间在网上看到腾讯后台开发总监bison分享的一篇 ... -
关于领域建模时考虑用户需求的出发点的理解
2012-12-12 15:32 1128摘自http://www.jdon.com/4275 ... -
关于软件的任务到底是什么的思考
2012-12-12 10:53 881摘自http://www.jdon.com/43127 ... -
应用架构设计的三个类型
2012-12-04 11:08 854转载http://www.jdon.com/43952 ... -
混合OO和Functional设计
2012-11-14 17:12 767摘自 http://www.jdon.com/43907 ... -
DCI架构是什么?
2012-11-12 17:19 1376摘自http://www.jdon.com/37976 ... -
EDA事件驱动架构 领域事件 Event Sourcing
2012-11-12 10:11 2677摘自http://www.jdon.com/eda.html ... -
不变性immutablity设计
2012-11-08 14:39 1178摘自http://www.jdon.com/4296 ...
相关推荐
彭辰阳的讲座PPT :http://www.jdon.com/jivejdon/thread/39722
MPLS L3vrf DCI配置 https://editor.csdn.net/md/?articleId=120409937 DCI互联 Layer 3 VRF-MPLS (EVE vqfx实验)全部配置
Google B4 DCI网络论文,详细介绍B4网络的优点以及实现!
慧点科技DCI.Dec数据交换中心将“电子政务”的基本需求、电子政务安全平台提供的安全机制、数据存储层与应用层的有效隔离有机地结合在一起,使电子政务的应用与其底层的数据结构和存储方式无关。各应用系统与数据...
兆易单片机gd32F407单片机程序 rtthread + lwip + DCI
包含DCI0-0、DCI0-1、DCI1-0、DCI1-1的解码 输入字节流,解出对应字段的内容 如0-0中。 Nrb_dl_bwp 48 payload bitstring 11010100101110101111111 频域资源分配 11 11010100101 时域资源分配" 4 1101 VRB-to-PRB...
通信行业周报:中国电信采购DCI波分设备,开放光网络拉开帷幕
达梦数据库DM8_DCI 编程指南 OCI接口使用指南
GY-906 MLX90614ESF BAA BCC DCI IR红外测温传感器模块温度采集资料
基于DCI标准的数字影院系统,王延生,,本文针对目前数字电影技术国内外现状,提出了一套真正符合数字影院技术规范的数字影院系统,详细介绍了数据码流的处理过程,并在
6645G下行DCI设计和流程 pdf文档整理.zip
通信行业周报:中国电信采购DCI波分设备,开放光网络拉开帷幕.pdf
DCI 此存储库包含在Golang和Javascript中实现DCI(数据,上下文,交互)模式的示例。 在撰写这些文章时,我以DCI为动力来学习有关JS和Go的更多信息。 因此,随着我对语言的更多了解以及对DCI的了解加深,我对方法的...
数据中心网络400G和DCI网络架构.pdf
4G、5G网络优化
DCI型细水口模架
摘要:随着FPGA芯片越大而且系统时钟越高,PCB板设计以及结构设计变得越难,随着速率的提高,板间的信号完整性变的非常关键,PCB板上若有关键信号,那么需要进行阻抗匹配,从而避免信号的反射和震荡。Xilinx公司提供...
在大前端辉煌发展、在数据时代的当下我们一起阅读了一篇设计相关的老文:《TheDCIArchitecture》一起来再探索和复习一下相关的设计和思想DCI是数据Data场景Context交互Interactions简称,重点是关注数据的不同场景的...
DCI格式通过DCI格式传输的信息DCI 0用于PUSCH调度格式0和格式1A区分的标志(1bit)跳频标志位(1bit)资源块分配和跳频资源分配调制编码方案和
本文档基于中国电信ChinaNet网的网络现状,并根据中国电信宽带互联网业务承载的需求,对ChinaNet网组网结构、路由策略、链路组织、网络安全、资源分配等内容进行了规范。