消息队列常见问题

  categories:资料  tags:  author:

1、消息异常处理

1、1 处理机制:死信队列和异常消息队

死信队列:由于某种原因无法传递的消息都放置在死信队列上,主要触发点(MCA 如果远程消息不能交付,MCA 发送的消息不能进行数据转换,Trigger Monitor 出发消息失败)。

回退队列:在外部应用在消费队列中消息时,如果发生异常,会发送回滚命令,回滚后的消息始终会放在队列的顶部,不断被处理和回滚,导致队陷入死循环状态,为了解决这个问题,MQ提供一种机制,选中队列右键–》属性–》存储器,设置回退队列和阀值,如设置队列为q1,阀值为2,则在rollback两次后将消息转入q1。

两者都为消息的可靠传输提供一种机制来处理异常。

两者的区别:

1. 起作用的阶段,死信队列主要在发送阶段,回退队列主要在消息的消费阶段生成。

2. 死信队列由系统触发, 回退队列主要由应用发送rollback触发。

3. 死信队列一个队列管理器只有一个,而回退队列可以为每个队列设置一个。

1.2处理手段:

首先要根据消息的类型,然后再根据是死信和回退队列进行处理。

a) 针对死信队列,需要分析具体原因,重新发起,最后做成自动恢复

b)针对回退队列,如果是能容忍部分丢弃的消息,那么将对应的回退队列的信息持久化即可;如果不能容忍丢失,那么需要人工介入处理。

从最终用户的角度来说,系统应该做到不感知到死信,针对回退的信息,人工介入进行处理,处理的过程中,是否不允许进行同样的业务,需要根据业务的需求来做。

 

当正常的消息到了业务队列后,消费者监听这个队列进行处理,在消费者处理的过程中,难免会有一些消息处理失败,因为业务的种种原因,但是这些消息一旦失败,那么就会影响性能和后面的消息的消费,这时候就需要一个死信队列,来存放这个消费不了的消息,进入死信队列后,在进行其他处理.
消息消费失败处理方式:
一 进入死信队列(进入死信的三种方式)
1.消息被拒绝(basic.reject or basic.nack)并且requeue=false
2.消息TTL过期
3.队列达到最大长度

工作的项目中使用了消息队列,需要注意几个关键问题:

  • 消息的顺序问题
  • 消息的重复问题
  • 事务消息

2、顺序消息

消息有序指的是可以按照消息的发送顺序来消费。例如:一笔订单产生了

阅读全文

java和maven环境变量设置

  categories:资料  author:

JAVA_HOME、CLASSPATH、PATH设置详解

  Windows下JAVA用到的环境变量主要有3个,JAVA_HOME、CLASSPATH、PATH。

     JAVA_HOME 指向的是JDK的安装路径,如C:\jdk1.5.0_06,在这路径下你应该能够找到bin、lib等目录。

( 今晚使用新系统配置,不知道怎么的需要加bin才可以在CMD运行,JAVA_HOME=C:\jdk1.5.0_06\bin; 下面是网上整理实践可使用贴上的,注意JDK和Eclipse必须同位数Bit才可以使用,不能是不同位数的程序,已实践,不然要报错无法使用;如需卸载JDK,JDK不能直接删除文件夹,要使用卸载方式,不然无法再使用JDK或无法卸载,只有重新安装OS才能使用了,以前遇过 )

JAVA_HOME=C:\jdk1.5.0_06

PATH 环境变量原来Windows里面就有,你只需修改一下,使他指向JDK的bin目录,这样你在控制台下面编译、执行程序时就不需要再键入一大串路径了。设置方法是保留原来的PATH的内容,并在其中加上%JAVA_HOME%\bin

(注,如果你对DOS批处理不了解,你可能不明白%%引起来的内容是什么意思;其实这里是引用上一步设定好的环境变量JAVA_HOME,你写成x:\JDK_1.4.2也是可以的;你可以打开一个控制台窗口,输入echo %JAVA_HOME%来看一下你的设置结果)

PATH=%JAVA_HOME%\bin;%PATH%
同样,%PATH%是引用以前你设置的PATH环境变量,你照抄以前的值就行了。

CLASSPATH 环境变量我放在最后面,是因为以后你出现的莫名其妙的怪问题80%以上都可能是由于CLASSPATH设置不对引起的,所以要加倍小心才行。
CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
首先要注意的是最前面的”.;”,如果你看不清,我给你念念——句点分号。这个是告诉JDK,搜索CLASS时先查找当前目录的CLASS文件——为什么这样搞,这是由于LINUX的安全机制引起的,LINUX用户很明白,WINDOWS用户就很难理解(因为WINDOWS默认的搜索顺序是先搜索当前目录的,再搜索系统目录的,再搜索PATH环境变量设定的) 。
为什么CLASSPATH后面指定了tools.jar这个具体文件?不指定行不行?显然不行,行的话我还能这么罗索嘛!:) 这个是由java语言的import机制和jar机制决定的,你可以查资料解决。
具体的设定方法: 右键点击我的电脑->属性->高级->环境变量,修改下面系统变量那个框里的值就行了。

用户修改txt文本属性auto.bat文件,在其末尾加入:

set JAVA_HOME=C:\jdk1.5.0_06
set PATH=%JAVA_HOME%\bin;%PATH%
set CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

 

二 Maven的安装与环境配置

 想要安装 Apache Maven在Windows 系统上, 需要下载 Maven
阅读全文

eclipse菜单解释及中英对照

  categories:资料  author:

在使用Eclipse作为开发工具的时候,建议使用英文版本的(直接百度从官网下就行,这里不详细描述,如果有问题,咱们私聊)。虽然中文版本的对于和我一样对英文是小白的看起来特别爽,但是公司大多是英文版本的,所以清醒些,该怎么办?

在Eclipse工作台的上方提供了菜单栏,该菜单栏包含了实现Eclipse各项功能的命令,并且与编辑器相关,即菜单栏中的菜单项与当前编辑器内打开的文件是关联的。例如,编辑器内没有打开任何文件,那么,将显示如图1.2所示的菜单栏。如果打开了一个JSP文件,那么将显示如图1.3所示的菜单栏。

但是用英文版的,那些英文单词怎么办,连建立个java类,都不知道从何下手,有没有和我一样的。

在这里我就做一次搬运工,整理了一些关于eclipse的中英对照的资料,及一些快捷键的用法,希望对自己和大家都有帮助。如果感觉有帮助请叫我雷锋

以下是关于eclipse的中英对照,如果遇到不懂的地方可以做参考

 

「File」菜单

这个菜单可以建立、储存、关闭、打印、汇入及汇出工作台资源以及结束工作台本身。

名称 功能
New(新建) 建立Java元素或新资源。配置哪些元素会显示在「Window」→「Preferences」的子菜单中。在Java视景中,依预设,会提供项目、套件、类别、接口、来源数据夹、实时运算簿、档案和数据夹的建立动作。
Close(关闭) 关闭现行编辑器。如果编辑器中有资料尚未储存,则会显示一个储存要求对话框。
Close All(全部关闭) 关闭所有编辑器。如果编辑器中有资料尚未储存,则会显示一个储存要求对话框。
Save(储存) 储存现行编辑器的内容。如果编辑器中没有未储存的变更,则会停用。
Save As(另存新檔) 以新名称储存现行编辑器中的内容。
Save All(全部储存) 储存所有编辑器内容以及未储存的变更。如果没有编辑器中有未储存的变更,则会停用。
Revert(回复) 将现行编辑器的内容回复成已储存档案中的内容。如果编辑器中没有未储存的变更,则会停用。
Move(移动) 移动资源。如果是Java元素则会停用。如果要移动Java元素,请使用「Refactor」→「Move」(如此会更新档案的所有参照),或使用「Edit」→「Cut/Paste」(如此不会更新参照)。
Rename(重新命名) 将资源重新命名。如果是Java元素则会停用。如果要重新命名Java元素,请使用「Refactor」→「Rename」(如此会更新档案的所有参照)。
阅读全文

Nexus3.x搭建Maven私服环境

  categories:资料  tags:,   author:

Maven介绍

Apache Maven是一个创新的软件项目管理和综合工具。
Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件。
Maven最强大的功能就是能够自动下载项目依赖库。
Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。
Maven项目的结构和内容在一个XML文件中声明,pom.xml 项目对象模型(POM),这是整个Maven系统的基本单元。

Maven提供了开发人员的方式来管理:
1)Builds
2)Documentation
3)Reporting
4)Dependencies
5)SCMs
6)Releases
7)Distribution
8)mailing list
概括地说,Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。
Maven增加可重用性并负责建立相关的任务。
Maven最初设计,是以简化Jakarta Turbine项目的建设。在几个项目,每个项目包含了不同的Ant构建文件。 JAR检查到CVS。
Apache组织开发Maven可以建立多个项目,发布项目信息,项目部署,在几个项目中JAR文件提供团队合作和帮助。

Maven主要目标是提供给开发人员:
1)项目是可重复使用,易维护,更容易理解的一个综合模型。
2)插件或交互的工具,这种声明性的模式。

私服介绍
私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。

Nexus介绍
Nexus是一个强大的Maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。
如果使用了公共的Maven仓库服务器,可以从Maven中央仓库下载所需要的构件(Artifact),但这通常不是一个好的做法。
正常做法是在本地架设一个Maven仓库服务器,即利用Nexus私服可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。
Nexus在代理远程仓库的同时维护本地仓库,以降低中央仓库的负荷,节省外网带宽和时间,Nexus私服就可以满足这样的需要。
Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。
Nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。

阅读全文

Nexus3.0.0+Maven的使用

  categories:资料  tags:  author:

1、Nexus介绍

     Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问 和部署在你所维护仓库中的每个Artifact。Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。Nexus 使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。Nexus支持WebDAV与LDAP安全身份认证。

2、安装部署

2.1  下载地址

http://www.sonatype.com/download-oss-sonatype

2.2  安装

1、  解压安装包

tar –zxvf nexus-3.0.0-03-unix.tar.gz

2、  修改Jdk路径

Nexus3.0.0的版本需要JDK1.8的版本

a)、cd /data/nexus-3.0.0-03/bin

b)、vi nexus

c)、添加JDK配置

INSTALL4J_JAVA_HOME_OVERRIDE=/data/jdk1.8.0_91

3、  修改使用的用户

a)、vi nexus.rc

b)、添加配置

run_as_user=root

4、  启动nexus服务

./ nexus

2.3 成功验证

访问http://XXX:8081,看是否能跳转到Nexus页面

因为Nexus3.0.0与Nexus2.X系列的差别很大,所以本章节我大概讲解下Nexus3.0.0的功能使用。

1、功能介绍

阅读全文

水粉画入门基础知识详解

  categories:儿童画教程  tags:  author:

1.水粉画概述

水粉画是使用水调合粉质颜料绘制而成的一种画。水粉画颜料纯度较高,色彩明快艳丽,具有较强的表现力,它便于处理较大面积的色块及画面,作画快捷简便。水粉画的色彩可以在画面上产生艳丽、柔润、明亮、浑厚等艺术效果。水粉画艺术表现力比较丰富,遮盖力强,可以浑厚凝重,也可以轻快流畅、挥洒自如。

水粉画颜料具有较强的遮盖力,它兼有油画和水彩画的某些特性,在画法上色多水少像油画,色少水多则似水彩。水粉画以明暗和色彩对比的手法来描绘对象,讲究色彩的层次虚实和冷暖变化,注意自然光色的真实表现,它的技法基本上属于西洋画体系。水粉画使用的工具、材料和操作都比较简单,画幅的不同尺寸,画风的粗放或精细,描绘具体的或概括的对象都很适合。它的应用范围十分广泛,外出写生、收集生活素材、绘制色彩画创作初稿等都非常方便。

水粉画具有一套完整而系统的、与其他画种不同的技法。水粉画的表现技法丰富,既可以独立的作为一个专业的画种,它既可以训练初学者掌握色彩造型能力和表现能力,也可以培养学生的个人风格和艺术气质。所以色彩入门训练一般选择水粉画,水粉画作为美术色彩基础训练的有效形式,同时也可以为进一步学习其他画种打下基础。

水粉画是初学者学习色彩最常采用的形式,一方面工具材料简便、经济,另外一方面水粉画表现力和覆盖力强,便于初学者学习和掌握。因此常被各类美术院校和美术专业作为色彩教学的重要方法,同时也被广泛地用来画制宣传画、广告及工艺设计。

2.水粉画的特性

(1)水粉画是介于油画和水彩画之间的画种,水粉画既有水彩画的明快、柔和的表现效果,又有油画的厚重、覆盖力强的特点,不仅可以大面积地涂改,还可以进行深入细致的描绘,它是应用广泛、表现力较强的画种之一。

(2)水粉画颜料含比较多的粉,粉质细腻,既可平涂,表现力又强。另外,水粉画可用不同的笔法,从而形成各种笔触。画者能够在画面上反复地修改,作画时可大胆落笔,从容作画,画幅可大可小。

(3)水粉画在有其自身优势的同时,也有一定的局限性,例如:颜色含粉量大,衔接起来比较困难,也较难表现丰富微妙的中间层次和暗色调。由于所使用的纸吸水、吸色性不同,很容易出现泛色的现象。

(4)由于水粉颜色含有一定分量的白粉,使色彩干湿之间有明显的差别,即湿时色彩较暗,干后白粉色浮现在表面,明度比湿时要强,而色彩鲜明度减弱。这一状况,使水粉画在制作中掌握色彩干湿变化时增加了难度。只有在实践中,逐步积累经验,才能取得预期的效果。

3.水粉画的学习

掌握水粉画的方法和技能,必须遵循学科特有的学习规律,才会获得有效的成果。

(1)循序性。从易到难、从简到繁是学习中不能忽视的进度原则。色彩写生一般先从室内静物开始,室内写生也要重视难易进度,从简单的静物开始,然后画较复杂的静物组合。

(2)严格性。水粉画的基础训练都应是严格的,只有经过严格训练,在未来的艺术表现中,才可能有更多的自由与较强的表现力。

(3)反复性。任何技术的学习和训练,都须经过不断的、反复的练习方能达到其目的,在数量积累后才有可能获得质的飞跃。水粉画写生和表现能力的提高,唯有依靠反复的磨炼。

(4)坚持性。基础学习,一般容易使人感到枯燥乏味,即使绘画技能的不断发展与长进,也无法跨越这个重要的阶段,直接关系着学习的成败。“持之以恒”是走向成功的保证,色彩学习也是如此。

4.水粉画的工具与材料

(1)水粉画颜料

水粉画以水作为调和剂,它的颜料为粉质颜料。水粉颜料在制造中或多或少地加入了白粉颜料,干透后的色层浓密厚重,表面无光泽。另外,写生时应注意保持颜料本身的湿度,如在调色盒内加一块湿海绵或湿布,盖紧盖子等。以保持颜料自身的水分,使绘画顺利进行。

在调色盒里挤颜料,要注意由浅入深、由暖到冷的排列次序。白色系列、黄色系列、红色系列、棕色系列、蓝色系列、绿色系列、最后是黑色,按上述的顺序在调色盒里排列颜色,这样一方面易于使用,另一方面也便于颜色的干净和保存。

(2)水粉画笔

画笔是表现技法的重要工具。水粉画笔的质量,一般以含水性好而富有弹性的为上等。每一种质地不同、形状不同的画笔,都有它自己的使用特性和功能,在作画时,要充分发挥其特点以获得好的表现效果。通常使用的画笔有如下几种。

扁形方头笔:有大小不同的各种型号,很适宜涂较大面积的色块及用体面塑造形体。画笔侧面也可画出较细的线,如运笔时正侧转动,就会出现线面结合、富有变化的表现效果。

水彩笔:富有弹性、又含水性好的狼毫画笔。毛笔的笔锋长而尖,灵活生动,表现某些具有线特征的形体。

油画笔:不论是猪鬃或狼毫的笔毛,由于笔锋短,笔毛质地坚挺,其吸水性都很差,但笔触却刚直有力。它适宜于厚画法,蘸一笔颜料画一笔。用油画笔作水粉画的使用方法比较近似油画效果。

底纹笔:底纹笔是笔头扁平的羊毫笔,笔头比最大号的水粉笔要宽。用于涂底色、画大面积的天空、地面,及比较概括统一的远景等;幅面较大的静物画背景,也常使用底纹笔来画。底纹笔是制作较大水粉画幅不可缺少的工具。

3水粉画纸

对水粉画纸的要求不是很严格。水粉画纸要求纸质结实不吸水,并且要有一定的厚度,上色后不起凹凸皱纹,要有纸纹,以利于颜料的附着。其他画纸如水彩画纸、素描纸都可以使用。

(4)颜料盒与盒盖

颜料盒主要是贮放颜料,同时盒盖也可作调色使用的画具。在作水粉画过程中,颜料的消耗量比水彩要大得多,所以颜料盒中贮放颜料的格子,容量要大。

(5)吸水布与其他

吸水布是作画过程中帮助作画者控制画笔中的水分和色彩份量的。也可以用来抹去画笔中残留的颜料,避免将残余的颜色都洗入水中,而导致调色用水的混浊。作画结束后,还可将吸水布洗净后放入色盒内,用它挥发出来的水分用来保持盒内颜料的湿润。

以前画水粉画, 没注意吸水布的重要, 后来才发现, 要经常涮笔, 涮完后一定要用吸水布擦干净, 否则水多会影响水粉画的覆盖力, 影响水粉画的效果的!!!  没有吸水布也可以用普通可以吸水的纸等替代。… 阅读全文

简单易懂的水粉画基本技巧

  categories:儿童画教程  tags:  author:

水粉画是在美术高考中不可缺少的一个重要考点,那现在就让长沙美术培训学校来给大家讲讲一些关于水粉画的基本知识吧!

   1、用水。画水粉画的关键之一是用水。适当地用水可以有效地塑造形体,表现色彩。画水粉静物一般情况下用水要尽量少,要惜水如金。水和色要协调,色多水多,色少水少(非常重要)

   用水的技巧:笔头以颜色为主稍蘸水即可,用完一种颜色,笔头要用水洗净,用吸水布挤干笔头(太重要,否则水太多,无法覆盖其他颜色等,再上色,后蘸水,以免弄脏下一笔色,初学者养成此习惯很重要
   2、调色。调色是水粉画色彩能否表现丰富的关键。调色不当画面会出现生、灰、脏、乱、火、假等现象。

   调色的技巧:将颜料在调色盘上摆开,在该物体固有色周围逐一添加其他颜色,形成既有联系又有区别的某一色彩系列,表现出丰富的色彩体系。具体做法是以画面主要色调及主要色为主,选定固有色,将该色颜料在调色盘上摆开,在其周围逐一相加,调出系列色相。

   3、上色彩。步骤为:先画背景,其次台面及衬布,最后画主要物体。
   上色的技巧:画主要物体从亮部画起,先画固有色,调准固有色,注意同样的物体近处应亮,远处应略暗,形成色彩空间次序。如色彩不准或面积不当,可待完全干后,再覆盖;画主要物体颜色要纯正,厚重,饱和,以“摆”的技法为主。稳准铺排到位;笔触要顺应物体结构。

   4、调整。调整的技巧:从整体着色、着大体色、逐步逐层整体推进深入,切忌一下子把某个物体画完。待整体完成所有物体亮部、灰部、暗部之后,加深最暗的、点亮最亮的、减弱最跳的、提高较灰的达到整体协调的画面效果。

   首先调整主要物体的色彩,色彩分层及变化,调整物体造型、形体结构,外轮廓等;画面明暗对比,色彩冷暖对比;画出最亮部分的高光及衔接。
来源:http://blog.sina.com.cn/s/blog_c2d13cb80101o33m.html
如何调色:
把颜色备齐然后在纸上尝试任意两种或三种颜色相调和所产生的变化,从而熟悉颜色。然后再尝试着去调书上某个水果或者某个罐子的颜色。注意要调某一块颜色时,首先分析用哪几种颜色有可能调出这块颜色。
水粉调颜色不需要调太匀,不能像搅拌机一样两块颜色拼命地搅,可以稍微生一点,哪怕最后画到纸上会带点生颜色都不要紧。
画水粉调色时用的颜色种类太多颜色容易脏掉。注意用色的比例。当能比较准确的把书上的任何一块颜色调出来时,那接下来就可以临摹整张的水粉静物画了。想画好水粉,一定要多看一些好的范画书籍,提高自己对漂亮颜色的认识以及对颜色的敏感度。不要机械的去背颜色,锻炼自己的色彩感觉。至于画水粉的各种技法可以通过临摹和看教学视频去学习掌握。色彩最重要的问题还是如何调出漂亮的颜色,当能轻松的调出任何漂亮的颜色,塑造会容易的多。亮部是光源色加固有色,明暗交界线是固有色加互补色,暗面是固有色加互补色加环境色。暗面的色彩最多,但明度要统一。互补色可以记住这三对:红绿 橙蓝 黄紫
红加黄加蓝,也就是色彩的三原色相加,得到黑,而不是红加蓝。不过这也只是理论上的,实际在调和中,色彩调和得越多,其饱和度会下降,三原色相加,真正得到的是一个灰黑色。所以,在画色彩时,最好不要超过三种颜色相加,不然容易产生脏的颜色。
黄加蓝=绿;所以,绿加红=黄加蓝加红=黑
红加黄=橙;所以,橙加蓝=红加黄加蓝=黑
阅读全文

CAS单点登录原理以及debug跟踪登录流程

  categories:资料  tags:,   author:

CAS 原理和协议

基础模式

基础模式 SSO 访问流程主要有以下步骤:

1. 访问服务: SSO 客户端发送请求访问应用系统提供的服务资源。

2. 定向认证: SSO 客户端会重定向用户请求到 SSO 服务器。

3. 用户认证:用户身份认证。

4. 发放票据: SSO 服务器会产生一个随机的 Service Ticket 。

5. 验证票据: SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问服务。

6. 传输用户信息: SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。

下面是 CAS 最基本的协议过程:

基础协议图

阅读全文

CAS3.5.2 Server 集成 OAuth2.0 Server 详细介绍

  categories:资料  tags:, ,   author:

OAuth2.0是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储用户信息,而无需将用户名和密码提供给第三方应用,CAS3.5.x(x>1)提供了OAuth2.0的支持,包括客户端和服务端,依赖cas-server-support-oauth.jar包。

基本工作过程如下:

OAuth 2.0 Authorization

Jakob Jenkov
Last update: 2014-06-15

When a client applications wants access

阅读全文

DDD领域驱动设计简介

  categories:资料  author:

眼下在讨论软件架构的时候,DDD、微服务架构和容器技术这三个东西经常会相伴出现。本文希望尽量用大白话给工程师们讲清楚它们之间的区别和联系。很粗浅,很粗浅,技术大牛请略过…

DDD:是Domain Driven Design(领域驱动设计)的缩写。这是一位叫Eric Evans的老兄2004年在一本同名的书中提出的。它是针对复杂系统设计的一套软件工程方法:把系统分割为一个个有边界的上下文(Bounded Context);通过实体、值对象、聚合等来处理领域的信息;通过服务和领域事件与其他领域耦合;通过上下文地图来表述系统的宏观结构;强调领域专家的作用;强调持续集成和演化…

领域驱动设计之领域模型

2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD。领域驱动设计分为两个阶段:

以一种领域专家、设计人员、开发人员都能理解的通用语言作为相互交流的工具,在交流的过程中发现领域概念,然后将这些概念设计成一个领域模型;
由领域模型驱动软件设计,用代码来实现该领域模型;

由此可见,领域驱动设计的核心是建立正确的领域模型。

为什么建立一个领域模型是重要的

领域驱动设计告诉我们,在通过软件实现一个业务系统时,建立一个领域模型是非常重要和必要的,因为领域模型具有以下特点:

  1. 领域模型是对具有某个边界的领域的一个抽象,反映了领域内用户业务需求的本质;领域模型是有边界的,只反应了我们在领域内所关注的部分;
  2. 领域模型只反映业务,和任何技术实现无关;领域模型不仅能反映领域中的一些实体概念,如货物,书本,应聘记录,地址,等;还能反映领域中的一些过程概念,如资金转账,等;
  3. 领域模型确保了我们的软件的业务逻辑都在一个模型中,都在一个地方;这样对提高软件的可维护性,业务可理解性以及可重用性方面都有很好的帮助;
  4. 领域模型能够帮助开发人员相对平滑地将领域知识转化为软件构造;
  5. 领域模型贯穿软件分析、设计,以及开发的整个过程;领域专家、设计人员、开发人员通过领域模型进行交流,彼此共享知识与信息;因为大家面向的都是同一个模型,所以可以防止需求走样,可以让软件设计开发人员做出来的软件真正满足需求;
  6. 要建立正确的领域模型并不简单,需要领域专家、设计、开发人员积极沟通共同努力,然后才能使大家对领域的认识不断深入,从而不断细化和完善领域模型;
  7. 为了让领域模型看的见,我们需要用一些方法来表示它;图是表达领域模型最常用的方式,但不是唯一的表达方式,代码或文字描述也能表达领域模型;
  8. 领域模型是整个软件的核心,是软件中最有价值和最具竞争力的部分;设计足够精良且符合业务需求的领域模型能够更快速的响应需求变化;

领域通用语言(UBIQUITOUS LANGUAGE)

我们认识到由软件专家和领域专家通力合作开发出一个领域的模型是绝对需要的,但是,那种方法通常会由于一些基础交流的障碍而存在难点。开发人员满脑 子都是类、方法、算法、模式、架构,等等,总是想将实际生活中的概念和程序工件进行对应。他们希望看到要建立哪些对象类,要如何对对象类之间的关系建模。 他们会习惯按照封装、继承、多态等面向对象编程中的概念去思考,会随时随地这样交谈,这对他们来说这太正常不过了,开发人员就是开发人员。但是领域专家通 常对这一无所知,他们对软件类库、框架、持久化甚至数据库没有什么概念。他们只了解他们特有的领域专业技能。比如,在空中交通监控样例中,领域专家知道飞 机、路线、海拔、经度、纬度,知道飞机偏离了正常路线,知道飞机的发射。他们用他们自己的术语讨论这些事情,有时这对于外行来说很难直接理解。如果一个人

阅读全文


快乐成长 每天进步一点点      京ICP备18032580号-1