先说说这个框架的诞生由来不吧。
DDD,本人和这个开发思想渊源审慎。大约在三年之前,接触过一本书叫作《企业应用架构模式》。书中提到了领域驱动设计,可是,并未系统的讲解这个设计是什么样的,而是介绍了,把业务领域这一层独立出来是多么重要。而值得庆幸的是,在我接下来不久的一家公司,我就有机会把个人这些思想应用进去。可是,说实话,如今回想起来,当时的层次是在是过低了。并且,因为并未系统的学习过这种思想,因此,设计基本都是我本身想出来的,遵循了一些我认定的原则。最后,在我工做了一年后,发现,埋下了不小的坑。而也是在那段岁月里,第一次尝试搭建框架,尝试使用各类内容对其作支持。当时以为颇有成就感。不过,这件事,截止到了我从那里离职后,展转去到了另一家公司。遇到了我如今的团队老大。
因为面试的时候被问到了领域驱动设计,我感到很好奇,由于历来没有公司问过我,甚至没有同事跟我提过这件事。因此,我来到了这家公司。而进公司没几天,老大就跟我讲了领域驱动设计的相关内容,因为只是简单的讲解,我没法融会贯通,因此,本身买了本二手的《领域驱动设计》就这么啃起来了。初读的时候其实很喜欢,外国的大牛写的书老是让人很喜欢读下去。啃的时候还有另外一件事帮助我理解其细节——公司现有的框架。公司现有的框架是老大写的,那时候咱们还在作.net。因此,那套驱动是.net的。并且,至关简陋。不过呢,DDD的接口却是已经基本健全。不过,在我研习《领域驱动设计》的时候,反馈当前框架的时候发现了很多须要改进的地方。因而,我在后面的开发过程当中重写了一个框架,用在了公司后续的开发中。可是,也只是完成了基本的DDD须要的部分。后来,咱们试图探索能够将框架用于分布式,具有可伸缩性,却发现,在.net下能用的框架太少了。须要的框架大多都是些商业项目才能支撑的,并且还有收费。唉,一点开源精神都没有的世界,好失望呀。虽然说,微软已经在着手开源了,可是,姑且不说能开到什么程度,单是成型须要的时间就是个未知数,因而,咱们所有团队转战java,如今已经距离作出决定四五个月了吧。因为鄙人java基础比较薄弱,虽然已经恶补,可是,当前的框架仍是由咱们团队中另外一位同事写的。说实话,有一些不顺手的地方。可是,基本都是参照我以前写的框架就,加入了总线及消息队列。因此,用起来还算能够。此次就是要重写一套我满意的框架。
接下来,说说目标吧。
首先,这个框架须要支撑领域驱动设计,而这个支撑,是一系列的接口。在《实现领域驱动设计》一书中有说到一种六边形架构。我想,那应该是一种很天然的事情。领域驱动专一于领域开发,可是,使领域开发中的各类功能被实现,是须要对应的功能支持的。这里,会很天然的,也是至关纯粹的使用接口实现的方式,将具体的接口的实现隔离开来,从而使领域纯粹为了支撑应用的功能而存在,而,用到的接口,则由各个功能模块来实现。这样的话,实现也将变得灵活,由于能够直接把另外一种实现配置进来,而,领域对此,一无所知。
而,为了支撑这些,咱们须要引入的第一个必不可少的功能模块就是仓储的持久化。
仓储会以一系列的接口的形式出如今领域之中,而其实现,应该是能够被替换的,甚至,应该是容许同时有多个仓储实现被使用的。关于同时多个这个问题,我在开发的过程当中是有遇到的。在领域驱动的范围内,构成领域的构造块,咱们规定了这些,实体,值对象(实体和值对象一块儿组成聚合,而根节快点为聚合根),领域服务,仓储,查询服务,领域事件,在领域服务的外层,有一个东西叫作应用服务。记得我曾经还引入了一个叫作命令的东西,让领域服务可应用服务通讯,可是,在咱们正在使用的框架中,是没有的,由于,那个编码量比较大,可是,应该会有更好的分布式体验吧。。。。说的有点远了,记得我在开发领域时,遇到一个须要被缓存存储的结构,我一会儿不知道它该算什么了,若是它是聚合或者聚合的一部分,那么,它应该可以被仓储持久呀,可是,事实上来讲,确实不能。后来,我把它弄成了实体,放到缓存中存储了。其实,这也通顺,可是,又引起了我另外一个思考,存储它的缓存,算不算仓储呢?后面再纠结这个吧。
那说下如今又哪些东西被规划到了这个框架里面了吧。
首先,DDD这一套基本的东西是有的。而后,其背后的支持呢,首先,仓储,我打算遵循jpa来对仓储进行实现和配置,java里面,接入hibernate就能够很简单得实现了。而后是,领域事件。根据咱们目前的经验来讲,领域事件在一个子系统里是须要同步和异步两种的。可是,我总以为,这样是不美观的,只能先这么作,反正都能支持的。而,咱们把领域事件定已到了子系统内部,这件事我也比较纠结,这样,对吗,或者说,这样,好吗?
接下来,须要点支持分布式的东西,这里引入的是消息队列和rpc。我也不知道rpc是否能够取代消息队列,估计是不能够,咱们如今的框架是使用的这两种东西进行的同步和异步通讯。
而其还能够分别进行集群和负载均衡,基本知足了这个框架的需求啦。
大概就是这样了。