学习 DDD - 通用语言的模式】的更多相关文章

大家好,我是霸戈,这周学习了一些关于领域驱动设计的知识 ,对比较深刻的地方做了不少笔记,分享给大家. 在日常需求讨论的时候,经常会碰到一个需求会议开了一个多小时还没有达成共识.作为业务方(领域专家)明明表达的很清楚,但是开发人员却始终无法理解透彻,很明显的原因就是由于双方的知识体系不一致 ,没有形成一种双方互相都能理解的语言. 语言的鸿沟 虽然领域专家对软件开的技术所知有限,但他们熟悉使用自己的领域术语--可能还具有各种不同的风格.另一方面,开发人员可能会用一些描述性的,功能性的术语来理解和讨论…
通用语言就是将事情描述清楚的语言 达到DDD的目标代码即设计,设计即代码.通俗的讲,也就是开发人员写的代码领域专家也能看懂. ddd模式跟传统模式的一个区别在于 传统先创建数据库表 再根据表创建类.而ddd是先创建类 也就是实体 再根据实体创建数据库.这也就是为什么目前在使用EF的时候都推荐codeFirst…
1.引言 在开始之前,我想我们有必要先了解以下DDD的主要参与者.因为毕竟语言是人说的吗,就像我们面向对象编程一样,那通用语言面向的是? DDD的主要参与者:领域专家+开发人员 领域专家:精通业务的任何人. 开发人员:开发+测试. 领域专家擅长某个领域的知识,专注于交付的业务价值. 开发人员则注重于技术实现. 开发人员总是想着类.接口.方法.设计模式.架构等.以面向对象的编程思想进行思考,思考如何进行抽象.封装.继承.多态等.而领域专家对软件中的框架.持久化.数据库等没有概念,而这也就导致了他们…
什么是通用语言 通用语言, 最主要的目的就是减少交流中信息丢失, 在实际开发中, 可能关联很多人, 例如有业务层面的业务细节制定者.领域专家.产品经理.项目经理 .架构师.开发经理.测试经理等等, 即使确定了核心域, 但是对于同样的领域知识, 每个人也有自己的理解, 举个例子, 我们通常说的商品和货物,是不是其实就是一个东西 ? 在销售领域叫商品, 但是一旦进入物流领域就叫货物, 所以我们一说商品就知道这是在销售子域, 一旦说货物就知道这是在物流领域, 如果只用物品来进行交流可能就会丢失信息,因…
接触到DDD到现在已经有8个月份了,目前所维护的项目也是基于DDD的思想开发的,从一开始的无从下手,到现在游刃有余,学到不少东西,但是都是一些关键字和零散的知识,同时我也感受到了是因为我对项目越来越熟悉,熟能生巧导致我现在在做需求的时候根本不用过多的去思考,就能很好的完成业务需求,我慢慢的意识到,学习DDD是非常有必要的. 在传统的开发模式中,产品经理在跟业务专家沟通业务需求后,对其进行抽象并将结果通过口头或者项目管理工具传达到开发人员,开发人员根据产品经理传递的业务需求机械式地进行功能开发,这…
值得学习的C语言开源项目   - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.tiscali.cz/~cz210552/webbench.html - 2. Tinyhttpd tinyhttpd是一个超轻量型…
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.tiscali.cz/~cz210552/webbench.html - 2. Tinyhttpd tinyhttpd是一个超轻量型Ht…
IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072                        创梦网络赚钱群:248318056                        创梦娱乐休闲群:224801824  教程下载,在线交流:创梦IT社区:www.credream.com  网络赚钱,营销学习:创梦网赚:www.cremoney.tk  休闲娱乐,在线影视:创梦…
CPU: STM32 调试平台: STM32F103ZET和STM32F103VBT 软件平台: Keil uVision4 电路设计: Altium Designer v6.9 http://blog.csdn.net/u013686019/article/details/19897961 二.学习型红外遥控设备的各个模块实现 2.4 红外脉宽存储及FLASH的读写 依据STM32型号的不同,FLASH容量由16K到1024K不等. FLASH模块主要由三部分组成:主存储器.信息块.闪存存储器…
下载地址:点我 <C语言学习路线图•C语言必须知道的300个问题>以基础知识为框架,介绍了c语言各部分知识所对应的常见开发疑难问题,并作了透彻地解析.<C语言学习路线图•C语言必须知道的300个问题>内容包括初识c语言,一个简单的c程序,算法入门,常用数据类型,运算符与表达式,输入/输出函数,选择.分支结构程序设计,循环结构,数组,函数编程基础,指针解析,常用数据结构,位运算操作符,存储管理,预处理和函数类型,文件的读写操作和图形图像处理.<C语言学习路线图•C语言必须知道的…
Go语言基础之网络编程 现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程. 关于网络编程其实是一个很庞大的领域,本文只是简单的演示了如何使用net包进行TCP和UDP通信.如需了解更详细的网络编程请自行检索和阅读专业资料. 互联网协议介绍 互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite),正是这一些协议规定了电脑如何连接和组网.我…
WCF学习之旅—请求与答复模式和单向模式(十九) WCF学习之旅—HTTP双工模式(二十) 五.TCP双工模式 上一篇文章中我们学习了HTTP的双工模式,我们今天就学习一下TCP的双工模式. 在一个基于面向服务的分布式环境中,借助一个标准的.平台无关的通信协议,使各个服务通过SOAP Message实现相互之间的交互.这个交互的过程实际上就是信息交换的过程.WCF支持不同形式的信息交换,我们把这称之为信息交换模式(Message Exchange Pattern(简称MEP),下同), 常见的M…
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数的所属对象的引用.         简单说,哪个对象调用了this关键字所在的函数,this就代表哪个对象. 1.区别局部变量和成员变量 内存图解: 说明: 程序执行到main函数时,main函数进入栈内存中的方法区,执行到Person p = new Person("旺财");时,在ma…
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数的构造函数 如果在类中定义了构造函数,那么类中的默认构造函数就没有了 构造函数在创建对象时调用 构造函数也有默认的return语句(省略不写) 函数执行到return语句后,栈中该函数的方法区就会出栈 如: class Person{ private…
Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习Android开发做些准备. Java和C++的语法有很多类似之处,学习中重点关注的是差异部分.   数据类型 Java支持的基本数据类型有: 1) 整数:byte/short/int/long 2) 浮点:float/double 3) 字符:char 4) 布尔:boolean   除此之外,通过类…
IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- --------------------------------- qq交流群:创梦技术交流群:251572072                         创梦网络赚钱群:248318056                         创梦娱乐休闲群:224801824 教程下载,在线交流:创梦IT社区:www.credream.com 网络赚…
写这篇文章主要是之前三篇对DDD的介绍算是自己学习的一次试水,也希望能够有更多的人能帮我发现其中的问题.昨天继续阅读了DDD书,发现了自己之前的例子存在了一些问题,早上也和园友进行了一些讨论.最后整理出此文,还记得第一篇用户注册是怎么做的吗?再次回顾一下,但也有一点变化,为了更好的符合DDD, 这次将应用代码写在了Application层中. 先贴上领域内的核心代码 public class User { public User(string name, string password) { t…
承载(Host)通用语言执行时(CLR) 还有一种使用COM 的方法是是把须要集成的 F# 代码与已有的 C/C++ 应用程序集成到一起.开成自己定义的承载通用语言执行时.通用语言执行时就是 C++ 应用程序,且有一些可用的库(.lib)文件.能够在标准的 C++ 应用程序中链接它. 承载通用语言执行时的代码要比载入 COM 库的代码稍许复杂一点,但不须要复杂的注冊 COM 库了:这种方法还可能以很细粒度地控制通用语言执行时的行为.尽管.我们会发现默认的行为对于大多数情况已经很好了:可是,这样的…
先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起,生成一个可执行文件. 指令:cc 文件名.o 链接成功会生成一个.out可执行文件,选择用终端打开运行. 4.运行:./a.out //也可以双击a.out运行  ./表示当前路径 也可以同时编译并链接 指令:cc a.c 可以直接在终端里生成文件,生成一个源文件到当前目录 指令:touch   a…
今天在学习DDD的过程中看到了大神 圣杰的博文 个人觉得非常经典 强烈推荐  在此提供url链接: UML类图10分钟快速入门 关于聚合 的理解 :一类没有紧密相关的东西聚在一起 ,分开了也可以独立存在 例如 大雁群是一群大雁聚合在一起,又比如动物园里面 一群不同种的动物聚合在一起.在一个服务中可能有时候,一个实体,它里面有别的实体的集合,这就是聚合. 组合指的是一堆密不可分的东西聚成的一个东西,例如小鸟是由翅膀和鸟头组成的.…
在这一次中来学习一下C语言的内存布局,了解它之后就可以解释为啥在用malloc()申请的内存之后需要用memset()来对内存进行一下初始化了,首先来了解一下物理内存与虚拟内存: 物理内存:通过物理内存条获得的内存空间. 虚拟内存:它是一种内存管理技术,能够均处一部分硬盘空间充当内存使用. 而在C当中的内存布局如下: 其中最顶部的是内核空间: 除这个内核空间之外的则是用户进程的内存空间: 下面看一下有哪些内容,首先是栈区: 接着是内存映射段: 接着就是堆区了: 接着再就是数据段: 最后一个则是文…
Go语言并发模式 利用goroutine和channel进行go的并发模式,实现一个资源池实例(<Go语言实战>书中实例稍作修改) 资源池可以存储一定数量的资源,用户程序从资源池获取资源进行使用,使用完成将资源释放回资源池 程序 pool.go package pool import ( "errors" "io" "log" "sync" "time" ) type Pool struct {…
深度学习与人类语言处理(Deep learning for Human Language Processing) 李宏毅老师深度学习与人类语言处理课程笔记,请看正文 这门课会学到什么? 为什么叫人类语言处理呢? 现在大家熟知的基本都是自然语言处理,那什么是自然语言呢? 在自然中发展出来的用于沟通的语言(例如中文.英文) 自然语言相反的是人造语言:例如编程(Java.python) 人类的自然语言分为两种形态:语音.文字 所以这门课叫深度学习与人类语言处理 大多数自然语言处理课程中语音处理只占了一…
语音识别 语音识别该何去何从? 1969年,J.R. PIERCE:"语音识别就像把水变成汽油.从大海中淘金.治疗癌症.人类登陆月球" 当然,这是50年前的想法,那么语音识别该如何做呢? 一个典型的语音识别系统如下,输入一段语音到模型,模型输出一段文本 Speech:表示一个长度为T,维度为d的向量序列 Text:一个token序列,长度为N,V个不同的token,通常T>N 接下来看看输入可以有哪些可能,输出有哪些可能,首先看下输出部分 输出Token 音位(phoneme,发…
上节回顾深度学习与人类语言处理-语音识别(part1),这节课我们将学习如何将seq2seq模型用在语音识别 LAS 那我们来看看LAS的Encoder,Attend,Decoder分别是什么 Listen Listen是一个典型的Encoder结构,输入为声学特征\({x^1,x^2,...,x^T}\),输出和输入长度相同,是对声学特征的高阶表示,\({h^1,h^2,...,h^T}\). 我们希望Encoder可以做到以下两件事: 提取输入的内容信息 移除不同说话者之间的差异,去掉噪音…
上节回顾深度学习与人类语言处理-语音识别(part2),这节课我们接着看seq2seq模型怎么做语音识别 上节课我们知道LAS做语音识别需要看完一个完整的序列才能输出,把我们希望语音识别模型可以在听到声音的时候就进行输出,一个直观的想法就是用单向的RNN,我们来看看CTC是怎么做的 CTC 根据上面说的,在线语音识别,模型在听到声音的时候就需要输出,我们看下使用RNN的基本架构 input: 长度为T的声学特征 Encoder:单向RNN ouput:长度为T的token,每一个输出位置对应词典…
jsp学习笔记:mvc开发模式2017-10-12 22:17:33 model(javabe)与view层交互 view(视图层,html.jsp) controller(控制层,处理用户提交的信息)与model层交互 MVC是一种分层结构的设计思想,不是现成的方法,在不同的开发环境下有不同的实现手段.其中: ①“M”(Model)为模型层,通常主要负责数据库模型的建立: ②“V”(View)为视图层,主要负责界面的显示和与用户的交互操作: ③“C”(Controller)为控制层,主要负责业…
现在工作上主要用的语言是java,java在企业级的应用上能够发挥很好的用途,但有时候要做一个小功能时,比如批量更新文件,抓取网页等,这时候用java就显得太笨重了.因此就学习了python这门脚本语言. 这篇随笔主要是讲述python怎么处理文本文件,顺便巩固下python的一些基本知识. 好了,开始吧...... 需求阐述 处理文本文件:读一个本地文件,逐行处理 说到处理文件,不得不说下python的内置函数 open open(file, mode='r', buffering=-1, e…
关于面向对象编程对于一个java程序员那是再熟悉不过了,不过对于C++而言相对java还是有很多不同点的,所以全面复习一下. 类 C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计.类是 C++ 的核心特性,用户定义的类型. 咱们来新建一个头文件来定义一下类: 其访问修饰符具体含义如下: private:可以被该类中的函数.友元函数访问. 不能被任何其他访问,该类的对象也不能访问. protected:可以被该类中的函数.子类的函数.友元函数访问. 但不能被该类的对象访…
收集一些C/C++相关的源码,如有更高效的库,请提醒我 补充上去 C/C++相关交流Q群 1414577 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.tiscali.cz/~cz210552/webbenc…