DDD理论学习系列(1)-- 通用语言】的更多相关文章

DDD理论学习系列--案例及目录 1.引言 上一节讲解了领域模型,领域模型主要是将业务中涉及到的概念以面向对象的思想进行抽象,抽象出实体对象,确定实体所对应的方法和属性,以及实体之间的关系.然后将这些实体和实体之间的关系以某种形式(比如UML.图形.代码.文字描述等)展现出来.而领域模型是领域建模的结果,那如何建模呢?我们可以借助于UML. 我们知道UML(统一建模语言)是一种用于绘制软件概念图的图形符号.在和他人交流以及帮助解决设计问题方法,图示是最有效的.在DDD中我们习惯用UML进行领域建…
DDD理论学习系列目录 1. 引言 领域一词,主要有以下两个意思: 一国主权所达之地. 学术思想或社会活动的范围. 不管是指国家的主权范围也好还是学术活动范围,都是在讲一个范围,一个界限. 比如我们常说的,学术领域.思想领域.技术领域.语言领域.物理领域.医学领域.游戏领域.JAVA领域..NET领域等等,它们中不管是泛指还是特指某个领域,都是限定在某个范围之内的. 由此可见领域一词重在范围的界限. 下面我们就回归正传,DDD,Domain Drive Design,全称,领域驱动设计.那这个领…
DDD理论学习系列目录 1.引言 我们还是先来拆词理解,领域模型可以拆为"领域"和"模型"二词. 领域:按照我们之前的文章的理解,DDD中的领域是指软件系统要解决的问题,如我们的办公设备公众号在线商城就是为了解决电商问题,对应的就是电商领域. 模型:百度百科解释为对于某个实际问题或客观事物.规律进行抽象后的一种形式化表达方式.如户型图就是实际房屋结构的模型. 把两个词结合起来,我们给领域模型下个定义:领域模型是对我们软件系统中要解决问题的抽象表达. 这个理解还是很生…
DDD理论学习系列--案例及目录 1.引言 实体对应的英语单词为Entity.提到实体,你可能立马就想到了代码中定义的实体类.在使用一些ORM框架时,比如Entity Framework,实体作为直接反映数据库表结构的对象,就更尤为重要.特别是当我们使用EF Code First时,我们首先要做的就是实体类的设计.在DDD中,实体作为领域建模的工具之一,也是十分重要的概念. 但DDD中的实体和我们以往开发中定义的实体是同一个概念吗? 不完全是.在以往未实施DDD的项目中,我们习惯于将关注点放在数…
DDD理论学习系列--案例及目录 1.引言 提到值对象,我们可能立马就想到值类型和引用类型.而在C#中,值类型的代表是strut和enum,引用类型的代表是class.interface.delegate等.值类型和引用类型的区别,大家肯定都知道,值类型分配在栈上,引用类型分配在堆上. 那是不是值类型对应的就是值对象,引用类型对应的就是实体吗?很抱歉,不是的. 值对象我们要分开来看,其包含两个词:值和对象.值是什么?比如,数字(1.2.3.14),字符串("hello world".&…
DDD理论学习系列--案例及目录 1. 引言 单从字面理解,不管是领域服务还是应用服务,都是服务.而什么是服务?从SOA到微服务,它们所描述的服务都是一个宽泛的概念,我们可以理解为服务是行为的抽象.从前缀来看,根据DDD的经典分层架构,它们又隶属于不同的层,应用服务属于应用层,领域服务属于领域层. 应用层(Application):负责展现层与领域层之间的协调,协调业务对象来执行特定的应用程序任务.它不包含业务逻辑. 领域层(Domain):负责表达业务概念,业务状态信息以及业务规则,是业务软件…
DDD理论学习系列--案例及目录 1. 引言 A domain event is a full-fledged part of the domain model, a representation of something that happened in the domain. Ignore irrelevant domain activity while making explicit the events that the domain experts want to track or b…
DDD理论学习系列--案例及目录 1. 引言 DDD中Repository这个单词,主要有两种翻译:资源库和仓储,本文取仓储之译. 说到仓储,我们肯定就想到了仓库,仓库一般用来存放货物,而仓库一般由仓库管理员来管理.当工厂生产了一批货物时,只需交给仓库管理员即可,他负责货物的堆放:当需要发货的时候,仓库管理员负责从仓库中捡货进行货物出库处理.当需要库存盘点时,仓库管理员负责核实货物状态和库存.换句话说,仓库管理员负责了货物的出入库管理.通过仓库管理员这个角色,保证了仓库和工厂的独立性,工厂只需要…
DDD理论学习系列--案例及目录 1. 引言 Module,即模块,是指提供特定功能的相对独立的单元.提到模块,你肯定就会想到模块化设计思想,也就是功能的分解和组合.对于简单问题,可以直接构建单一模块的程序.而对于复杂问题,则可以先创建若干个较小的模块,然后将它们组装.链接在一起,从而构成复杂的软件系统. 在DDD中,模块的用途也是如此,通过分解领域模型为不同的模块,以降低领域模型的复杂性,提高领域模型的可读性. 2. DDD中的模块 模块是一个笼统的概念,比较宽泛,为了正确发挥模块的威力,理解…
目录 DDD理论学习系列(1)-- 通用语言 DDD理论学习系列(2)-- 领域 DDD理论学习系列(3)-- 限界上下文 DDD理论学习系列(4)-- 领域模型 DDD理论学习系列(5)-- 统一建模语言 DDD理论学习系列(6)-- 实体 DDD理论学习系列(7)-- 值对象 DDD理论学习系列(8)-- 应用服务&领域服务 DDD理论学习系列(9)-- 领域事件 DDD理论学习系列(10)-- 聚合 DDD理论学习系列(11)-- 工厂 上下文映射图 战略设计与战术设计 实体 值对象 领域…
DDD理论学习系列--案例及目录 1.引言 聚合,最初是UML类图中的概念,表示一种强的关联关系,是一种整体与部分的关系,且部分能够离开整体而独立存在,如车和轮胎. 在DDD中,聚合也可以用来表示整体与部分的关系,但不再强调部分与整体的独立性.聚合是将相关联的领域对象进行显示分组,来表达整体的概念(也可以是单一的领域对象).比如将表示订单与订单项的领域对象进行组合,来表达领域中订单这个整体概念. 我们知道,领域模型是由一系列反映问题域概念的领域对象(实体和值对像)组成,聚合正是应用在领域对象之上…
DDD理论学习系列--案例及目录 1.引言 在针对大型的复杂领域进行建模时,聚合.实体和值对象之间的依赖关系可能会变得十分复杂.在某个对象中为了确保其依赖对象的有效实例被创建,需要深入了解对象实例化逻辑,我们可能需要加载其他相关对象,且可能为了保持其他对象的领域不变性增加了额外的业务逻辑,这样即打破了领域的单一责任原则(SRP),又增加了领域的复杂性. 那如何去创建复杂的领域对象呢?因为复杂的领域对象的生命周期可能需要协调才能进行创建. 这个时候,我们就可以引入创建类模式--工厂模式来帮忙,将对…
1.引言 在开始之前,我想我们有必要先了解以下DDD的主要参与者.因为毕竟语言是人说的吗,就像我们面向对象编程一样,那通用语言面向的是? DDD的主要参与者:领域专家+开发人员 领域专家:精通业务的任何人. 开发人员:开发+测试. 领域专家擅长某个领域的知识,专注于交付的业务价值. 开发人员则注重于技术实现. 开发人员总是想着类.接口.方法.设计模式.架构等.以面向对象的编程思想进行思考,思考如何进行抽象.封装.继承.多态等.而领域专家对软件中的框架.持久化.数据库等没有概念,而这也就导致了他们…
1. 引言 限界上下文可以拆分为两个词,限界和上下文. 限界:是指一个界限,具体的某一个范围. 上下文:个人理解就是语境. 比如我们常说的段子: "我想静静." 这个句子一般是想表达"我想静一静"的意思.但是我们却把它玩笑成"静静是谁?". 可见上下文语境很重要. 这个例子只是个开胃菜,我们接着往下看. 2. 案例分析 整个应用程序之内的一个概念性边界. 边界之内的每种领域术语.词组或句子--也即通用语言,都有确定的上下文含义. 边界之外,这些术…
通用语言就是将事情描述清楚的语言 达到DDD的目标代码即设计,设计即代码.通俗的讲,也就是开发人员写的代码领域专家也能看懂. ddd模式跟传统模式的一个区别在于 传统先创建数据库表 再根据表创建类.而ddd是先创建类 也就是实体 再根据实体创建数据库.这也就是为什么目前在使用EF的时候都推荐codeFirst…
什么是通用语言 通用语言, 最主要的目的就是减少交流中信息丢失, 在实际开发中, 可能关联很多人, 例如有业务层面的业务细节制定者.领域专家.产品经理.项目经理 .架构师.开发经理.测试经理等等, 即使确定了核心域, 但是对于同样的领域知识, 每个人也有自己的理解, 举个例子, 我们通常说的商品和货物,是不是其实就是一个东西 ? 在销售领域叫商品, 但是一旦进入物流领域就叫货物, 所以我们一说商品就知道这是在销售子域, 一旦说货物就知道这是在物流领域, 如果只用物品来进行交流可能就会丢失信息,因…
大家好,我是霸戈,这周学习了一些关于领域驱动设计的知识 ,对比较深刻的地方做了不少笔记,分享给大家. 在日常需求讨论的时候,经常会碰到一个需求会议开了一个多小时还没有达成共识.作为业务方(领域专家)明明表达的很清楚,但是开发人员却始终无法理解透彻,很明显的原因就是由于双方的知识体系不一致 ,没有形成一种双方互相都能理解的语言. 语言的鸿沟 虽然领域专家对软件开的技术所知有限,但他们熟悉使用自己的领域术语--可能还具有各种不同的风格.另一方面,开发人员可能会用一些描述性的,功能性的术语来理解和讨论…
关于I2C 学习的时候介绍得最多的就是24C02 这里存储EEPROM了,但学的时候基本只是讲讲简单的I2C 的总线数据传输而已,即使先gooogle上搜索也绝大部分这这样的文章,很少有说到如何在实际情况中如何使用的程序. 24Cxx系列数据块存储时也是比较讲究的, 图为 几类不同容量的芯片的存储空间结构,24C16以下空间的大于8位后的寻址高位地址在片选地址中选择,详细看芯片手册.另外要注意的就是字节页,一次连续写入的数据量不能超过一页的数据量.有些老款的芯片甚至不支持跨页写入.为了适用也参照…
承载(Host)通用语言执行时(CLR) 还有一种使用COM 的方法是是把须要集成的 F# 代码与已有的 C/C++ 应用程序集成到一起.开成自己定义的承载通用语言执行时.通用语言执行时就是 C++ 应用程序,且有一些可用的库(.lib)文件.能够在标准的 C++ 应用程序中链接它. 承载通用语言执行时的代码要比载入 COM 库的代码稍许复杂一点,但不须要复杂的注冊 COM 库了:这种方法还可能以很细粒度地控制通用语言执行时的行为.尽管.我们会发现默认的行为对于大多数情况已经很好了:可是,这样的…
[Go语言入门系列]前面的文章: [保姆级教程]手把手教你进行Go语言环境安装及相关VSCode配置 [Go语言入门系列](八)Go语言是不是面向对象语言? [Go语言入门系列](九)写这些就是为了搞懂怎么用接口 1. GOPATH目录结构 在[保姆级教程]手把手教你进行Go语言环境安装及相关VSCode配置一文中已经配置过工作空间GOPATH的环境变量了,并在工作空间中新建了三个目录src.pkg.bin了.那为什么要新建这三个目录呢?这三个目录又有什么作用呢? 首先,不管是什么系统或项目,目…
dart系列之:dart语言中的特殊操作符 目录 简介 普通操作符 类型测试操作符 条件运算符 级联符号 类中的自定义操作符 总结 简介 有运算就有操作符,dart中除了普通的算术运算的操作符之外,还有自定义的非常特殊的操作符,今天带大家一起来探索一下dart中的特殊操作符. 普通操作符 普通操作符就很好解释了,就是加减乘除,逻辑运算符,比较运算符和位运算符等. 这些操作符和其他语言的操作符没什么差别,这里就不详细介绍了.大家看几个普通操作符的例子: a++ a + b a = b a == b…
1.前面配置参考:http://www.cnblogs.com/spring_wang/p/3393147.html 2.pb通用调EAI方法代码如下: //==================================================================== // 函数: .gf_interface_eai( ) //-------------------------------------------------------------------- //…
1.现在做的项目是关于业务系统与U811.1的接口项目. 2.那么就需要调整通过EAI调用生成U8业务单据. 3.下面就一个通用的向U8-EAI传递XML的通用方法 4.肯定有人会问怎么还用VB调用呢?为什么不用C#等? 这是因为现在客户的老系统用的是VB6.0开发的,所以要结合老系统开发新业务再与U8业务一起动作. 5.还有朋友会有疑问全用U8不就行了,U8是标准产品又不是“神”,在企业管理上不是所有的U8业务流程都是最好的.最优的.最先进的.所以有些业务必须要客开.并用U8二开还是会被限制的…
在Jenkins中,英语一大片,看着各种蛋疼.非常高兴的是,Jenkins作为一个主流流行的持续构建工具,提供了一个本地化语言的配置界面. 你可以找到它,在Jenkins每页的左下角.如下图: 点击帮助我们本地化当前页,出现如下窗口(友情提示:请关闭自动刷新功能) Locale:你翻译的语言的种类,Chinese (Simplified)简体中文. Your Name:[可选]你的称呼(真实姓名.网名.代号均可) I contribute my translations to the Jenki…
面对成百上千的生产系统用户操作数据接入落地,你是否厌倦了每次机械编写打包解包的代码?对一次性接入多个数据的时候,还要对不同人联调,费时费力,你是否还会手忙脚乱,忙中不断出错?是否当数据出问题了,用的时候才发现,数据已经损失大半,产品/领导压力巨大,费一天劲才能定位问题,关键是下次还是不能实时发现,快速定位. 怎么办?GAS(通用解析服务)就是为了解决上述问题,结合即通多年数据方案实践,提出的一个数据接入的组件.一杯清茶,轻点鼠标,轻松面对大批数据接入问题. GAS在ADs中的位置 图 1  AD…
一.概述 ASP.NET Core 通用主机 (HostBuilder),该主机对于托管不处理 HTTP 请求的应用非常有用.通用主机的目标是将 HTTP 管道从 Web 主机 API 中分离出来,从而启用更多的主机方案. 基于通用主机的消息.后台任务和其他非 HTTP 工作负载可从横切功能(如配置.依赖关系注入 [DI] 和日志记录)中受益.通用主机是 ASP.NET Core 2.1 中的新增功能,不适用于 Web 承载方案.通用主机正处于开发阶段,用于在未来版本中替换 Web 主机,并在…
目录 简介 dart中的变量 定义变量 变量的默认值 Late变量 常量 总结 简介 flutter是google在2015年dart开发者峰会上推出的一种开源的移动UI构建框架,使用flutter可以非常方便的编译成运行在原始android,ios,web等移动平台上的移动应用. flutter是使用dart来编写的,最新的flutter版本是2.5.3,而最新的Dart语言版本是2.14. 本系列将会深入谈谈dart语言的用法和最佳实践,希望大家能够喜欢. dart中的变量 Dart语言吸取…
1 CTE语法WITH关键字 通用表表达式(Common Table Express, CTE),将派生表定义在查询的最前面.要使用CTE开始创建一个查询,可以使用WITH关键字. CTE语法: WITH <expression_name> [(column_name [,...n])] AS ( CTE_query_definition) [, <another_expression>] <query> 首先为CTE提供一个名称,该名称类似于用于派生表的别名.然后可以…
002.GO语言基础 1 参考资料 1.1 http://www.cnblogs.com/vimsk/archive/2012/11/03/2736179.html 1.2 https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/02.2.md 1.3 官网: https://golang.org/ref/spec#Constants 2 helloworld 2.1 Go使用package(和Pyt…
CLR 要求每个类型最终都要继承自 System.Object 类型 //隐式继承 Object class Employee { ... } //显示继承继承 Object class Employee : System.Object { ... } 类型定义(C#)描述 System.object 的公有方法 Equals:如果两个对象具有相同的值,方法返回 true GetHashCode:方法返回对象的值的散列码.如果一个对象被用作散列表的一个键值,那么该对象的类型应该重写 GetHas…