• [图解]企业应用架构模式2024新译本讲解14-服务层2


    1
    00:00:01,070 --> 00:00:01,820
    我们来看案例

    2
    00:00:02,600 --> 00:00:06,620
    案例也同样是之前跟事务脚本

    3
    00:00:07,030 --> 00:00:09,400
    领域模型等等用过的案例是一样的

    4
    00:00:10,480 --> 00:00:12,700
    这里译文改了一些

    5
    00:00:16,200 --> 00:00:20,430
    应用服务类在这里

    6
    00:00:21,080 --> 00:00:22,990
    我们看它的命名

    7
    00:00:23,530 --> 00:00:24,590
    我们往往是以

    8
    00:00:26,110 --> 00:00:28,510
    实际上就相当于我们分析类里面的控制类

    9
    00:00:31,720 --> 00:00:33,040
    用用例的名字来命名

    10
    00:00:34,140 --> 00:00:40,080
    这个在事务脚本里面已经见到过了

    11
    00:00:40,690 --> 00:00:42,920
    只不过事务脚本的时候

    12
    00:00:42,930 --> 00:00:45,630
    说的重点在事务脚本上面

    13
    00:00:45,930 --> 00:00:50,170
    现在我们说的是服务类的上面

    14
    00:00:51,860 --> 00:01:01,200
    可以说,泛化一个抽象的应用服务类

    15
    00:01:02,030 --> 00:01:06,030
    同样,这些具体的这些的话也可以泛化

    16
    00:01:06,040 --> 00:01:14,020
    但这里面的话它就直接,这个就是什么

    17
    00:01:14,030 --> 00:01:19,540
    这个就是接口了

    18
    00:01:19,860 --> 00:01:21,090
    刚刚说错了

    19
    00:01:21,100 --> 00:01:22,330
    这个就是接口了

    20
    00:01:22,340 --> 00:01:25,190
    一会我们看后面的

    21
    00:01:25,200 --> 00:01:27,200
    书上

    22
    00:01:27,210 --> 00:01:28,560
    还有更细的图

    23
    00:01:29,790 --> 00:01:31,660
    这个的话有点冲突

    24
    00:01:31,830 --> 00:01:33,580
    跟我们后面演示的代码冲突

    25
    00:01:33,590 --> 00:01:34,620
    后面的演示代码的话

    26
    00:01:37,000 --> 00:01:41,060
    这个名字是描述实现接口的类的

    27
    00:01:41,660 --> 00:01:43,420
    接口应该有个I在这里

    28
    00:01:43,680 --> 00:01:47,450
    前面有个I,这个的话

    29
    00:01:47,460 --> 00:01:49,090
    他就把这个标成接口

    30
    00:01:49,630 --> 00:01:56,160
    意思就是说,这个类它依赖的是接口

    31
    00:01:56,370 --> 00:01:57,280
    后面的实现

    32
    00:01:57,290 --> 00:02:00,930
    包括Email怎么发

    33
    00:02:00,940 --> 00:02:03,660
    还有后面的第三方应用

    34
    00:02:03,670 --> 00:02:05,260
    怎么样发布到那里去

    35
    00:02:06,320 --> 00:02:09,000
    由实现类里面来写

    36
    00:02:11,410 --> 00:02:13,430
    我们来看这个案例

    37
    00:02:13,950 --> 00:02:15,270
    同样的,来源

    38
    00:02:15,280 --> 00:02:17,790
    也是跟我们前面的来源是一样的

    39
    00:02:18,830 --> 00:02:23,870
    这是类图,你看,这个就要多几个类

    40
    00:02:24,040 --> 00:02:26,420
    你看,刚才这个类在这里

    41
    00:02:27,090 --> 00:02:30,370
    刚才这个类把它说是接口

    42
    00:02:30,620 --> 00:02:32,920
    这里单独分成一个接口

    43
    00:02:34,420 --> 00:02:35,420
    这个是实现它

    44
    00:02:35,430 --> 00:02:39,130
    这个也是

    45
    00:02:41,060 --> 00:02:44,260
    你看这多了一个I,II看起来有点

    46
    00:02:44,270 --> 00:02:48,180
    两个I

    47
    00:02:49,330 --> 00:02:52,610
    一个是电子邮件的接口

    48
    00:02:52,620 --> 00:02:55,810
    一个是集成应用的接口

    49
    00:02:55,820 --> 00:02:57,470
    也就是说,这里面

    50
    00:02:58,600 --> 00:03:03,470
    它就添加了一点点应用的逻辑

    51
    00:03:03,600 --> 00:03:06,380
    就是说,前面收入确认这些东西

    52
    00:03:06,590 --> 00:03:07,720
    我们前面讲

    53
    00:03:07,730 --> 00:03:09,280
    用一个领域模型什么

    54
    00:03:09,660 --> 00:03:10,760
    都可以封装了

    55
    00:03:12,140 --> 00:03:15,360
    但是它这里加了一个内容,就是说

    56
    00:03:15,370 --> 00:03:19,530
    算完之后发一个邮件

    57
    00:03:20,870 --> 00:03:21,850
    显然,发邮件

    58
    00:03:22,020 --> 00:03:25,460
    就不能跟之前

    59
    00:03:25,670 --> 00:03:27,420
    产品合同这些类混在一起了

    60
    00:03:27,430 --> 00:03:27,660
    对吧

    61
    00:03:28,650 --> 00:03:29,330
    这是一个

    62
    00:03:29,340 --> 00:03:30,010
    第二个

    63
    00:03:31,000 --> 00:03:34,610
    并用一个面向消息的中间件来发布消息

    64
    00:03:35,110 --> 00:03:37,060
    通知其他已集成的应用

    65
    00:03:39,920 --> 00:03:43,450
    显然这是另外一个领域的内容

    66
    00:03:45,550 --> 00:03:47,660
    跟合同、产品

    67
    00:03:48,230 --> 00:03:49,620
    这个不是一个领域的

    68
    00:03:50,480 --> 00:03:54,950
    所以不能够混在一起

    69
    00:03:59,000 --> 00:04:04,350
    所以在这个地方定义了两个入口

    70
    00:04:05,500 --> 00:04:07,140
    入口的类,这个一样

    71
    00:04:08,560 --> 00:04:11,830
    管理数据库连接,DbManager

    72
    00:04:12,800 --> 00:04:13,870
    这是主程序

    73
    00:04:14,740 --> 00:04:18,280
    然后同样这是一个入口的类

    74
    00:04:19,830 --> 00:04:22,920
    定义了数据库的访问

    75
    00:04:23,290 --> 00:04:28,500
    表数据入口,跟事务脚本里面的一样,没有区别

    76
    00:04:30,630 --> 00:04:33,300
    这是类图,我们来看序列图

    77
    00:04:34,620 --> 00:04:37,830
    序列图,你看,它这里就比较多了

    78
    00:04:37,920 --> 00:04:42,960
    对象在这里,很多个

    79
    00:04:42,970 --> 00:04:49,200
    1234567

    80
    00:04:49,210 --> 00:04:52,370
    这里你看,Email的入口

    81
    00:04:52,770 --> 00:04:55,450
    这是集成应用的入口

    82
    00:04:56,230 --> 00:04:59,060
    上面算完了

    83
    00:04:59,520 --> 00:05:01,960
    这下面发Email,发布到集成应用

    84
    00:05:03,730 --> 00:05:07,080
    在这里,我们看一下

    85
    00:05:09,330 --> 00:05:11,010
    工具上,更清楚一点

    86
    00:05:11,020 --> 00:05:12,690
    工具上字体不太好看

    87
    00:05:12,980 --> 00:05:16,170
    但是更清楚,序列图

    88
    00:05:19,410 --> 00:05:20,090
    类图在这里

    89
    00:05:21,800 --> 00:05:30,310
    序列图,这是应用服务类

    90
    00:05:30,760 --> 00:05:31,840


    91
    00:05:31,850 --> 00:05:33,800


    92
    00:05:45,050 --> 00:05:45,140
    这里

    93
    00:05:46,710 --> 00:05:48,850
    创建了一个电子邮件入口

    94
    00:05:49,390 --> 00:05:49,950
    然后

    95
    00:05:58,500 --> 00:06:01,860
    里面让它发送电子邮件信息

    96
    00:06:03,560 --> 00:06:06,550
    同样的,下面一个集成应用的入口

    97
    00:06:08,180 --> 00:06:14,560
    然后这里发布到集成应用

    98
    00:06:15,380 --> 00:06:20,910
    涉及到的类是比较多的

    99
    00:06:21,330 --> 00:06:27,440


    100
    00:06:29,510 --> 00:06:34,730
    有8个类来协作

    101
    00:06:35,950 --> 00:06:37,760
    我们来看一下它的代码

    1
    00:00:00,730 --> 00:00:01,890
    这是代码

    2
    00:00:03,660 --> 00:00:04,730
    我们看主程序

    3
    00:00:06,390 --> 00:00:08,420
    同样,我们这里也加了一些注释

    4
    00:00:09,510 --> 00:00:14,260
    我们逐步逐句运行

    5
    00:00:32,620 --> 00:00:35,290
    这里面,也是跟前面事务脚本一样

    6
    00:00:35,300 --> 00:00:39,370
    用了一个SQLite的数据库

    7
    00:00:40,210 --> 00:00:42,280
    我们前面说过了,就不再说了

    8
    00:00:44,850 --> 00:00:49,550
    首先DbManager

    9
    00:00:52,070 --> 00:00:54,590
    用DbManager来创建数据库连接

    10
    00:00:55,350 --> 00:00:59,130
    这里把它放到一个using的块里面来

    11
    00:00:59,390 --> 00:01:03,590
    意思是确保它在使用之后能够被释放

    12
    00:01:03,760 --> 00:01:07,150
    一旦这个代码块结束之后

    13
    00:01:07,590 --> 00:01:09,480
    它就会被释放掉

    14
    00:01:13,060 --> 00:01:15,890
    那么这个就跳到DbManager这里了

    15
    00:01:16,580 --> 00:01:17,970
    前面跟事务脚本一样了

    16
    00:01:18,260 --> 00:01:24,750
    这个一样,数据源,一样的,就不多说了

    17
    00:01:24,760 --> 00:01:25,670
    打开连接

    18
    00:01:26,950 --> 00:01:29,680
    然后创建一个Command对象

    19
    00:01:29,930 --> 00:01:31,480
    数据库命令对象

    20
    00:01:32,480 --> 00:01:35,930
    然后设置命令的SQL语句

    21
    00:01:36,480 --> 00:01:39,230
    SQL语句就是如果这个表存在的话

    22
    00:01:39,240 --> 00:01:40,870
    就清空,这几步就是

    23
    00:01:42,450 --> 00:01:45,330
    把数据库里面的内容给建立起来了

    24
    00:01:46,580 --> 00:01:47,850
    有的话就清空

    25
    00:01:49,380 --> 00:01:51,210
    设置,执行,一样的

  • 相关阅读:
    window 11 wsl 安装docker
    【1464. 数组中两元素的最大乘积】
    JAVA设计模式-桥接模式
    uploadifive上传工具php版使用
    【优化调度】粒子群算法求解水火电调度优化问题【含Matlab源码 1181期】
    凭借这份180道最全高级岗面试题及答案,成功入职,美团定级T4
    B49 - 基于STM32单片机的心率血氧检测与远程定位报警装置
    Objective-C依然占C位,Swift和SwiftUI在iOS 15中的使用情况
    Git基本操作
    ChatGLM3-6B安装
  • 原文地址:https://blog.csdn.net/rolt/article/details/139796655