业务和开发团队之间的协作是DDD必不可少的部分,并且它是处于开发阶段的产品获得成功的关键. 领域专家指的是那些从业务领域的政策和工作流程到棘手处和特性都具有深刻理解的人.能够为你的问题区域提供深刻见解的人.他们可能是对于你当前工作领域具有很强的领悟和理解的产品所有者.用户或其他任何人. 1.领域专家与业务相关人员的对比 DDD寻找到在你当前工作的领域中是主题专家的人很重要.而要找到领域专家,我们就要区分领域专家与业务相关人员. 问题空间会给出一组需求.输入和预期输出——这通常是你的业务相关人员提…
提炼问题域的意义 理解一个复杂问题域以便创建简单且有用的模型需要深入详尽的知识以及深刻的见解,这些只能通过与从内到外理解该领域的人协作得到.对模型的设计进行连续实验和探究正是DDD的能力所能实现的.只有通过协作以及共享对问题域的理解,你才能有效设计一个模型以应对业务的挑战,这样也才能具备足够的灵活性应对新出现的需求. 知识提炼与协作 复杂问题域会包含大量信息,其中一些将不适合于解决待处理的问题,并且只会分散你建模工作的实际重心. 知识提炼是从问题域中提炼出相关信息的技术,其目的是构建能满足业务用…
1.通过通用语言达成共识 通用语言,已经强调过好多遍了,在DDD再怎么重视都不为过,后面可能还会讲. 知识提炼的输出以及共识的构建就是常见的通用语言(UL). 当与业务相关人员和主题专家进行建模时,每个人都应该有意识地始终应用富含领域专有术语的通用语言.这一语言必须现实制作,并在描述领域模型和问题域时使用.该语言还应该用于模型的代码实现,使用用作类名.属性和方法名称相同的术语和概念.正是这一语言使得业务和开发团队拥有了关于软件的有意义沟通. UL用于将模型的代码描述绑定到以业务能够理解的语言和图…
方式六:延迟对模型中概念的命名 对领域建模时命名很重要. 因为在不断的知识提炼过程中经常会发现已经被命名的概念与你最初理解的有出入,这时你当初的命名就会变成一个问题.其问题在于  最初选作名称的这个词所带来的“错误”联想  并且该联想还会限定你的思维方式. Gery Young(我也不认识是谁)建议,为你不确定的模型区域使用难以理解的词组成名称(例如可以用于问题域无关的 颜色 等).作为为模型区域或概念提供真实名称的替代方式,可以使用难以理解的词,直到你完全理解了一个关切问题所有的责任职责.行为…
DDD在存在许多DDD模式的同时,也有大量实践和指导原则,这些都是DDD思想体系成功的关键. 1.专注于核心领域 DDD强调的是在核心子域付出最多努力的需要.核心子域是你的产品会成功还是会失败的差异化因素所在.它是产品的独特卖的点,也是构建而非购买产品的原因. 核心领域是将为你的业务提供竞争优势并产生真实价值的产品内容. 至关重要的是,团队要理解核心领域是什么. 2.通过协作进行学习 DDD强调的是开发团队和业务专家之间协作,以生产出解决问题的有用模型的重要性. 没有业务专家的协作和投入,就不能…
可以将DDD看成一种开发思想体系:它促成了一种新的以领域为中心的思维方式. 它是一种学习过程,而非最终目标,这就是DDD的最大优势. 任何团队都可以编写一个软件来满足一组用例的需求,但那些将时间和精力花在其正在处理的问题域中的团队则能够持续演化产品以满足新的业务用例. DDD本身并非一种严格的方法论,而是必须与一些迭代式软件项目方法论结合使用以构建并演化一个有用的模型. 由此可见下面的这些理解,存在很大的误区: 1.战术模式是DDD的关键 这明显不对,DDD并不是一种面向对象的设计,也不是一种以…
前一篇,简单介绍了DDD战略模式的提炼问题域,这篇简单介绍它如何塑造应用程序的架构. 1.创建一个模型以解决领域问题 为每一个子域构建一个软件模型以处理领域问题并让软件与业务保持一致. 这个模型并非现实世界的模型,而更多的是构建来满足业务用例需求的一个抽象体,同时仍保持业务领域的规则和逻辑. 为了避免偶发性技术复杂性,模型要保持与基础架构代码的分离状态. 所有的模型都不是同等创建的,最合适的设计模式是基于每一个子域的复杂性需要来使用的,而非将总括设计应用到整个系统. 2.使用公共语言开启建模协作…
DDD的战术模式 DDD的战术模式(也称为模型构造块)是一个帮助创建 用于复杂有界上下文的有效模型的 模式集合. 也就是我们常说的设计模式. 问题空间 问题空间将问题域提炼成更多可管理的子域,是真对于问题域而言的. DDD问题空间的影响在于揭示什么是重要的以及在何处付出努力. 解空间 DDD解方面的内容涵盖了可以影响应用程序架构发展并让其更易于管理的模式.…
参考:感谢博主的分享... http://www.cnblogs.com/netfocus/archive/2012/02/12/2347938.html DDD ==> 领域驱动设计(Domain-driven Design) 一种模型驱动的软件设计方式 驱动方式: 数据库驱动:(分析需求-->建库建表-->代码) 领域驱动:分析领域问题/需求-->领域模型-->实现软件代码 领域驱动的核心为领域模型,领域驱动模型,模型驱动代码实现. 领域——问题域 领域驱动应该由开发人员…
学习AJAX其实有个很重要的应用,就是为了执行另外几个站点的ASP,返回结果. 真正用起来,发现2个问题,>_> 不许笑,一向做DELPHI,接触ASP不多的我,的确问题大堆. 第一个问题: VBS的变量传递给JS...通过学习发现很简单的... 先看下我大体实现方法: <% dim sSrv1Link sSrv1Link = "http://www.XXX.org/test1.asp?U=TESTUSER&M=111&E=222" %> <…
自己并不懂,在此先记录下来,留待以后学习... 正文 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨域问题一些细节. WebApi系列文章 C#进阶系列——WebApi接口测试工具:WebApiTestClient C#进阶系列——WebApi 跨域问题解决方案:CORS C#进阶系列——WebApi身份认证解决方案:Basic基础认证 C#进阶系列——WebApi接口传参不再困惑:传参详解 C#…
在 geoserver源码学习与扩展——restAPI访问 博客中提到了geoserver的跨域参数设置,本文详细讲一下geoserver的跨域访问配置. geoserver的跨域访问依赖java-property-utils-1.9.jar和cors-filter-1.7.jar两个jar包,在gs-web-app工程的pom.xml文件中,增加相应的依赖项,在maven编译时会自动下载打包到war包中,依赖项配置如下: <dependency> <groupId>com.the…
文章主要是基于学习后的总结. 1. 时钟域 假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域.假如设计有两个输入时钟,如图1所示,一个时钟给接口1使用,另一给接口2使用,那么我们说这个设计中有两个时钟域. 2. 亚稳态 触发器的建立时间和保持时间在时钟上升沿左右定义了一个时间窗口,如果触发器的数据输入端口上数据在这个时间窗口内发生变化(或者数据更新),那么就会产生时序违规.存在这个时序违规是因为建立时间要求和保持时间要求被违反了,此时触发器内部…
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------…
1.作用域: 域:空间.范围.区域… 作用:读.写 script  全局变量,全局函数 自上而下 函数 由里到外 {} 2.js解析: ⑴   “找一些东西”:var. function. 参数…… a = 未定义 所有的变量,在正式运行代码之前,都提前赋予了一个值:未定义. fn1 = function fn(){alert(2);} 所有的函数,在正式运行代码之前,都是整个函数块. 这一过程叫做 :“JS的预解析” 遇到重名的变量和函数,就只留下函数 ⑵   逐行解读代码: 表达式:=. +…
今天开始学习了EF的相关内容,以前只知道ADO.NET,今天学习后觉得有必要写个相关的学习心得,今天就先写第一篇. 我们的再学习的过程中所用到的环境是Windows7+SQLServer2008+VS2012. ①下面我们便开始创建一个数据库名为Test,数据库里建立两张表Student和Class. ②之后打开VS2012新建一个控制台应用程序名为Demo1.之后在Demo1这个项目上右击添加新建项,选择ADO.NET实体数据模型,并命名为DataModel.edmx. ③选择从数据库中生成,…
由于也是初学DDD,难免有很多不足和认识错误的地方.多数内容来自其他网络资料或者书籍. 参考:http://www.cnblogs.com/Leo_wl/p/4418663.html 希望多多提出宝贵意见,谢谢!!! DDD是一套强大的思想工具,是需要根据业务进行划分领域的,无论是否使用领域——对于公共的或独立的内容都是需要抽象出来的,避免重复造轮子. DDD可以应用于很多中不同的架构中,如:六边形架构.SOA.REST.CQRS.事件驱动架构和基于数据网络的架构等等. REST==>来自百度百…
想知道可视域分析是什么,就得知道可视域是什么 我们站在某个地方,原地不动转一圈能看到的所有事物就叫可视域.当然平地就没什么所谓的可视域. 如果在山区呢?可视范围就会被山体挡住了.这个分析对军事上有十分重要的意义. 在本例中,可视域是以GraphicLayer中的Graphics[]形式存在的. 这个例子用到了Geoprocessor这个类.这个类的对象是如何判别我要进行可视域分析呢?且听我慢慢道来. 看看结果 点击山谷的位置,出现一个红点,稍等10s左右,出现橙色的面块,橙色的面块就是红点位置所…
新旧架构对比图: DDD中的基础设施层包括数据持久化(ORM数据访问),IoC容器实现,AOP实现(安全,日志记录,缓存等) Repository的接口通常放在领域层,具体实现在基础设施层 旧架构的业务层被分成应用程序层和领域层…
LoadRunner基本测试流程: 制定性能测试计划(部分)  -> 创建测试脚本 -> 编译.运行测试脚本 -> 创建场景 - > 运行.监控场景.收集数据  -> 生成测试报告,分析测试结果                   1.定制性能测试计划(部分) 测试登录模块再8个用户的情况下系统的性能状况. 要求: -- 用户数:8人 -- 用户加载方式:每2秒钟加载1人 -- 运行时间:所有用户运行完脚本 -- 登录用户名:test1 -- 密码:test1 2.准备工作…
在跨域安全性方面,有多个地方会有限制,主要是XMLHttpRequest对象的跨域限制和iFrame的跨域限制,下面我们分别来看一下. Ajax跨域(CORS) CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制. CORS需要浏览器和服务器同时支持.目前,所有浏览器都支持该功能,IE浏览器不能低于IE10. 整个CORS通…
SVG可缩放矢量图形(Scalable Vector Graphics)这项技术,现在越来越让大家熟知,在h5的移动端应用使用也越来越广泛了, 下面让我分享给大家svg学习的经验. HTML体系中,最常用的绘制矢量图的技术是SVG和HTML5新增加的canvas元素.这两种技术都支持绘制矢量图和光栅图. 一.什么是svg? Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式.SVG是W3C在2000年8月制定的一种新的二维矢量图形格式,也是规范中的网络矢量图形标…
vuser_init() { //web_set_sockets_option('SSL_VERSION','TLS'); lr_start_transaction("login"); web_url("index.php", "URL=https://demo.pingnanlearning.com/test/login/index.php", "TargetFrame=", "Resource=0",…
最近开始筹备一个电商项目. 其实是公司的老本行了. 但今年公司希望在做项目的同时, 沉淀出一套针对电商的基础产品. 这样可以提高新项目的开发效率, 减少重复劳动. 那现如今, DDD(领域驱动设计)应该是比较受推崇的. 所以在这个项目里, 大家决定用DDD来设计系统与抽象业务. 我是十分懵逼的. 只能抓紧时间恶补了. 一开始请教度娘, 看了很多播客, 然而看完之后还是懵逼, 并没有获取到什么有效的知识. 少有的两篇结合能结合实际例子, 上点代码. 然而代码的简易程度也是幼稚的可怜. 这条路看来不…
webpack 小插件使用 webpack 监听文件变化配置 webpack 处理跨域问题 Webpack 小插件使用 clean-webpack-plugin: 用于在生成之前删除生成文件夹的Webpack插件 copy-webpack-plugin: 将单个文件或整个目录复制到生成目录 webpack.BannerPlugin内置插件: 给输出的文件头部插入注释信息 安装: npm i clean-webpack-plugin copy-webpack-plugin --save-dev w…
1.容器=数据结构+算法.相当于是为复杂的数据设计一种专门用于存放该数据的东西.用于开发中传递复杂的数据. 2.模版函数只能写在头文件中.不能单独做声明. 3.STL容器类分为三类: (1).顺序容器类         vector        数组.查询快,但是插入慢.加入的数据顺序与大小有关.         deque        数组.比vector查询慢,但是插入比deque快一点.采用了哈希的映射.         list              链表.插入快,查询慢 (2)…
1.隐藏:存在于派生类和基类中.只要成员名字相同就叫做隐藏.参数和函数名都相同时,是一种特殊的隐藏,叫做重写,重写只出现在函数中.若需要访问基类中被隐藏的成员,必须访问这种方法:“对象名:类名::隐藏成员名”.而“对象.成员名”访问的是派生类中的成员.之所以叫隐藏,是因为它的访问方式. 2.overload重载:override重写 3.虚函数:在声明函数时(定义函数时不用加)前面加上关键字virtual就为虚函数. 4.指针访问虚函数的特点:(1).使用对象的指针去访问普通函数时,只看指针所属…
1.如果一个类要成为基类,那么它的成员变量声明成受保护的变量,既用关键字protected修饰. 2.处理共同继承产生的二义性:采用虚继承方式,当出现两个相同的成员时,编译器会自动删除其中一个.其方法是在继承的时候加上关键字:virtual.也可以将会产生二义性的成员声明为私有成员.但是这种方法不可用,实际开发中无意义. 3.赋值有两种情况:(1).同类对象可以相互赋值.(2).派生类兑现可以为基类赋值(但是基类对象不能为派生类对象赋值).这种赋值方式只能赋值公共成员,因为私有成员不能被继承,既…
1.在实际开发中,引用类型变量值用于函数的参数中.它不会另外开辟空间(提高了程序效率),他相当于变量的别名,代表的就是当前这个变量的地址空间.(引用的底层用的是指针.因此从底层的角度讲,其实它的效率是没有提高的). 2.不要定义类似下列的函数: void fun(int parameter){}; void fun(int &parameter){}; 这两个函数符合重载的概念.编译也不会报错,但是当出现如下调用时,程序运行就会出错 int m = 10; fun(m); 这样调用时,程序不知道…