YiFramework是一个基于.Net8+Abp.vNext+SqlSugar的DDD领域驱动设计后端开源框架
从上至下,分别是
应用层
应用抽象层
领域层
领域共享层
基础设施ORM层
Host主机
对应的项目引用关系下图所示:
层级介绍
基础设施层:存放各种通用方法、ORM等
领域共享层:存放枚举、常量、事件参数、对应用层的dto
领域层:存放业务的内部实现(领域服务)、领域事件。对外也就是对应用层可以暴露实体、对应用层的dto
应用抽象层:存放应用层抽象、系统对外的dto
应用层:存放对业务的组装(领域服务),对外暴露的dto,主要是编排业务对象执行特定的应用程序任务
Host主机:存放跟WebHost,类似web启动器,包括中间件、swagger、等与web相关
基础设施层
首先,不管是任何系统,想要对通用方法的复用,就必然有基础设施供整个系统的使用。这个基础设施层其实就类似于三层架构的Common层,这个没啥说的
这一层目的是为了通用方法的复用
领域层
领域,这个词经常出现,感觉很抽象,我们可以把他类比成盒子或者模块,比如电商系统的售前、售后,我们这可以分成两个大的领域。
这里是整个结构的业务实现在这块,也是最重的一层。严格来说,不同领域之间想要调用,比如售后领域想查看售前领域的记录,可以通过事件抛出来,从而各个领域没有之间强耦合。
这一层的作用是实现各个领域的业务
领域共享层
这里只是存放一些领域所要使用的枚举、常量等,除了基础设施不要有其他的依赖,轻、也轻越好,因为他的目的不是对内,而是提供给给外部系统使用的。
这一层的作用是存放共享的枚举、常量等,也是为了存放领域层暴露给应用层的dto(比如领域层想暴露一个用户角色菜单对象,实体无法满足,就需可以创建这样的一个dto了,在其他文章可能大家会叫做info对象)
应用层
领域层是对内的,外部系统是不清楚的,那我们的业务实现想暴露出去,要通过应用层进行包装,编排业务对象执行特定的应用程序任务. 使用应用程序逻辑实现用例,比如api、signalr等
这一层的目的是对领域层的组装及数据的效验、使用应用程序逻辑实现用例。
应用抽象层
这里主要目的是将应用层暴露进行抽象,该层是为了提供外部系统之间依赖,于领域共享层类似,所以这一层也非常的轻,从上面的依赖关系图来看,领域共享层于应用抽象层是一条线性依赖。
这一层目的是为了应用抽象层可以被外部系统之间引用,从而通过Http代理等技术,实现远程调用接口访问应用层进行交互。这里感兴趣的可以看一下Abp.VNext的HttpProxy模块,默认意框架中不引入,等有需要的时候可以使用。
模板库:现在已经支持公开模板库,地址:https://gitee.com/ccnetcore/yi-template