Blame view

泰额版/Food Labeling Management Code/Yi.Doc.Md/01.框架快速开始教程/04.目录结构.md 4.64 KB
59e51671   “wangming”   1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
  好了,相信当你非常容易的启动了项目之后,并看到了页面效果,也感受到它的简易
  
  废话少说,直接上图:
  ![Alt text](../image/code.png)
  
  ***感觉和传统的不太一样,怎么这么多类库,感觉很难上手***
  
  NONONONONO!
  
  恰恰相反,其实对于使用用户来说我们只关注src中的Yi.Abp即可,如下图:
  项目模板结构:
  
  > 懂Abp.vNext的大佬看到目录就会有一股熟悉的味道
  
  Yi框架并没有直接采用Abp.vNext的模板生成,而是从零进行搭建起来的,但其中的分层结构与Abp.vNext是一致的,只是EntityFramework更换成了SqlSugar
  
  总体来看分为以下3个部分:
  - Framework (Yi.Framework框架部分,基础设施)
  - Module(Yi.Framework提供的内置模块部分,例如Rbac、Bbs)
  - Src (真正业务进行开发的部分)
  
  很好,换句话来说,只需要关注Src部分,其他的都以`源代码`的方式,并没有进行打成nuget包,1是为了方便二开,2是为了方便大家学习,3是本来也不复杂
  
  现在,我们来好好见识下为何如此分层吧~
  
  说到分层,不得不提这个经典神图
  
  ![Alt text](../image/fenceng.png)
  
  这张图就对应着我们的结构
  
  ![Alt text](../image/jiegou.png)
  
  这个可能没接触过DDD的不能理解,为什么要这样分层,三层架构不好吗?这样感觉好难,不能理解!且慢,待你看完下面每层的概述,你就不会认为简单,这不比三层架构简单?
  
  首先,Yi框架的分层非常明确,命名属于严格类型,对于初学者,一眼看破
  
  简单分为6个类库
  1. 应用层
  2. 应用抽象层
  3. 领域层
  4. 共享层
  5. 基础设施Sqlsugar层
  6. Web层
  
  我们从下至上讲解:
  ## Doman.Shared 共享层
  最底层是Doman.Shared,共享层,这里存放各个常量、枚举、不依赖各个模块的通用类:
  
  ![Alt text](../image/domanShared.png)
  
  > Doman.Shared,共享层 是一层很简单、不包含业务的模块,让它尽可能简单,有没有感觉像三层架构的Common?
  
  ## Domain 领域层
  只依赖Doman.Shared的`Domain领域层`
  
  ![Alt text](../image/domain.png)
  
  你可以选择存放大部分业务到领域层中,我们称这种模式叫做:`重领域层模式`
  你也可以选择存放大部分业务到它的上一层,Application 应用层,叫做:`重应用层模式`
  
  在领域层中,你的实体,以及跟实体相关的设施可在这里
  同时你也可以创建领域服务(Managers文件夹中),管理当前子领域的聚合,例如:
  
  > 在学校模块中,包含了学生、教师、教室,为了更加聚合,可在学校模块中创建领域服务
  
  ## Application 应用层
  接下来,是应用层
  
  ![Alt text](../image/application.png)
  熟悉的Crud、熟悉的Service,这里可以存放简单的通用业务,例如:Crud
  如果是重应用层开发,你完全可以将业务写入到应用层,当一个快乐的三层架构Crud,Boy
  
  另外,关于上次的Job任务调度、事件处理也可以放在这里进行处理
  
  > 简单而优雅~何乐而不为?
  
  ## Application.Contracrs 抽象层
  Application.Contracrs应用抽象模块,是对应用模块的抽象,它的结构也非常的简单
  
  ![Alt text](../image/contracrs.png)
  
  这里有Dtos的概念,不出意外,大部分人已经接触,具体的可以在后续Crud中进行讲解
  
  ## SqlSugarCore 数据访问层
  ![Alt text](../image/sqlsugar.png)
  
  这一层中,依赖领域层,但是不依赖应用层
  用于使用Sqlsugar相关的操作,比如`自定义仓储`
  但是,其实大部分通用场景,框架内部已经封装,能用到这层的机会都比较少
  对复杂的数据访问封装
  
  > 由于Querable对象用起来并没有到达SugarQuerable的爽感,且也不想让每个复杂查询都通过仓储进行扩展,这会导致用户使用感较差,所以经过各类平衡考虑,YiFramework框架与Sqlsugar是有轻量的`耦合性`的,框架提供Sqlsugar抽象层,避免过重的耦合,意味着,你可以在大部分地方使用Sqlsugar的操作,这在真正的业务项目来说,使用非常的方便,与Sqlsugar保持有一致的观念
  
  ## Web 层
  最后一个同样非常简单的一层
  Web模块,它的目的只是利用Asp.NetCore host Web主机,将应用层的业务通过Webapi形式暴露出去而已
  ![Alt text](../image/webPro.png)
  
  可以看的出,结构很简单,甚至除了启动配置目录,连其他一个额外的目录都没有
  
  > 综上所述,我们的业务,我的开发代码,大部分都在`领域层`与`应用层`
  
  光说不练,源代码直接提供rbac、bbs两大模块,结构是一致的,直接看看依葫芦画瓢不就清楚啦~