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

news2025/1/12 16:51:18

1
00:00:00,150 --> 00:00:05,030
接下来我们来看服务层模式

2
00:00:06,070 --> 00:00:11,740
这也是领域逻辑类型的最后一个模式

3
00:00:13,700 --> 00:00:17,110
我们前面实际上已经见过了,事务脚本

4
00:00:17,240 --> 00:00:19,900
的时候,已经见过了

5
00:00:21,030 --> 00:00:22,960
这里单独拿出来讲

6
00:00:24,220 --> 00:00:26,490
就是说,重点放在它上面

7
00:00:30,680 --> 00:00:32,150
这是书里面的定义

8
00:00:32,920 --> 00:00:37,110
通过一个层……

9
00:00:37,570 --> 00:00:39,570
实际上这个就类似于

10
00:00:39,580 --> 00:00:42,050
我们分析里面的控制类

11
00:00:44,660 --> 00:00:47,190
为什么需要这样一个层

12
00:00:48,540 --> 00:00:49,210
什么叫层

13
00:00:49,220 --> 00:00:54,920
我们前面也讲,类似性质的类的集合放一起

14
00:00:55,730 --> 00:00:57,540
因为它是一个不严谨的概念

15
00:00:57,550 --> 00:00:59,660
就是差不多的类的集合

16
00:01:01,070 --> 00:01:03,530
放一个包里面,类似这样

17
00:01:06,610 --> 00:01:08,300
为什么需要这样一个

18
00:01:08,650 --> 00:01:12,960
就是说,我们的核心域逻辑

19
00:01:14,570 --> 00:01:16,120
这是我的说法了

20
00:01:16,130 --> 00:01:17,880
书里面讲的不是这样讲

21
00:01:17,890 --> 00:01:19,800
说有领域逻辑、应用逻辑

22
00:01:20,070 --> 00:01:22,000
但实际上你说应用逻辑

23
00:01:22,010 --> 00:01:24,530
难道就不是领域逻辑的一部分吗

24
00:01:24,540 --> 00:01:24,890
是的

25
00:01:25,660 --> 00:01:27,530
我们应该说都是领域逻辑

26
00:01:28,100 --> 00:01:29,660
只不过有的是类级别的

27
00:01:33,590 --> 00:01:34,820
实体类级别的

28
00:01:34,830 --> 00:01:39,430
也就是说,它所有的逻辑

29
00:01:39,440 --> 00:01:41,320
能封装在类的操作里面

30
00:01:42,540 --> 00:01:43,860
包括状态机里面

31
00:01:45,030 --> 00:01:47,390
当然这个类,可能会组合其他类

32
00:01:50,070 --> 00:01:52,430
也就是说,责任分配给它

33
00:01:52,440 --> 00:01:53,830
它能够自己搞定

34
00:01:55,640 --> 00:01:58,000
从核心域的角度上面

35
00:01:58,010 --> 00:02:01,270
当然,后面还有数据库什么的再说了

36
00:02:02,530 --> 00:02:08,400
这个是类级别的逻辑

37
00:02:09,530 --> 00:02:10,520
大多数的逻辑

38
00:02:10,530 --> 00:02:12,920
都应该封装在类似这样的地方

39
00:02:16,220 --> 00:02:17,380
但是有一些逻辑

40
00:02:17,390 --> 00:02:21,450
它可能跟特定的用例相关的

41
00:02:24,710 --> 00:02:34,540
那么它需要调用很多个类来协作完成

42
00:02:35,230 --> 00:02:38,270
这种很可能不适合放在某一个类里面

43
00:02:38,930 --> 00:02:41,290
那就需要一个类似控制类这样的

44
00:02:41,300 --> 00:02:43,210
应用服务类

45
00:02:44,250 --> 00:02:45,770
来协调它们

46
00:02:46,320 --> 00:02:48,730
这种逻辑就是应用级别逻辑

47
00:02:48,740 --> 00:02:52,770
它是跟用例的控制流相关的

48
00:02:54,610 --> 00:02:59,900
所以命名往往是以用例的名字来命名

49
00:03:01,420 --> 00:03:02,980
或者用例集的名字来命名

50
00:03:02,990 --> 00:03:05,080
我们前面也讲过了

51
00:03:07,470 --> 00:03:12,190
那么它的存在只是为了协调这几个类

52
00:03:12,320 --> 00:03:16,220
也就是说,我们的类本身

53
00:03:18,390 --> 00:03:23,340
它本身如果没有用例的情况下

54
00:03:24,070 --> 00:03:25,360
很可能类本身

55
00:03:25,370 --> 00:03:27,890
可能是孤立的,独立的

56
00:03:29,090 --> 00:03:30,640
之间并没有静态关系

57
00:03:32,110 --> 00:03:32,930
它就摆在那里

58
00:03:34,580 --> 00:03:36,810
只有当你这个用例发生的时候

59
00:03:37,070 --> 00:03:39,630
通过应用服务或者控制类

60
00:03:42,650 --> 00:03:43,840
让它们一起来协作

61
00:03:47,400 --> 00:03:48,120
要是没发生

62
00:03:48,130 --> 00:03:50,600
那么它们可能互相并不知道对方

63
00:03:51,860 --> 00:03:53,010
如果它们知道对方

64
00:03:53,020 --> 00:03:55,050
很可能它们自己就可以协作了

65
00:03:55,420 --> 00:03:57,720
比如说,订单,订单项,商品

66
00:03:57,730 --> 00:04:00,750
它们之间有静态关系的

67
00:04:01,220 --> 00:04:03,380
那时候很可能你发一个消息给订单

68
00:04:03,840 --> 00:04:05,440
订单会自己找订单项

69
00:04:05,450 --> 00:04:06,520
订单项找商品

70
00:04:07,100 --> 00:04:08,170
这事情就做完了

71
00:04:08,420 --> 00:04:10,710
并不需要外面一个类找订单

72
00:04:10,720 --> 00:04:13,470
然后外面一个类再找订单项

73
00:04:13,880 --> 00:04:15,460
外面一个类再找商品

74
00:04:15,470 --> 00:04:21,950
不需要,应用级别的

75
00:04:22,680 --> 00:04:23,870
有了这样一个类之后

76
00:04:24,650 --> 00:04:29,720
它就使得这个逻辑

77
00:04:30,210 --> 00:04:32,860
就不会放到某个特定的类里面

78
00:04:33,880 --> 00:04:35,170
而是单独独立出来

79
00:04:36,680 --> 00:04:40,710
原来那些类,它就有了更多复用的可能

80
00:04:41,290 --> 00:04:43,020
如果说你某个用例

81
00:04:43,030 --> 00:04:45,340
特有的流程的信息

82
00:04:45,350 --> 00:04:46,660
就放在某个类里面

83
00:04:49,290 --> 00:04:51,810
那很可能另外一个用例用的时候

84
00:04:52,340 --> 00:04:53,410
它就会受到影响了

85
00:04:53,420 --> 00:04:54,850
很可能很多是不适合的

86
00:04:54,860 --> 00:04:57,290
那么复用的可能性就降低了

87
00:04:58,960 --> 00:05:00,680
当然,如果说,我们前面讲

88
00:05:00,690 --> 00:05:02,040
如果能够把它变成

89
00:05:03,240 --> 00:05:06,870
确实是某个实体类能够搞定的

90
00:05:09,530 --> 00:05:12,990
那么优先还是放在实体类里面了

91
00:05:14,770 --> 00:05:18,080
但是要注意实体类的这种划分

92
00:05:18,850 --> 00:05:20,170
识别、构造等等

93
00:05:20,180 --> 00:05:23,500
要按照我们特定的规则来完成

94
00:05:24,500 --> 00:05:27,990
不能说我为了尽可能放在实体类里面

95
00:05:28,000 --> 00:05:30,690
我搞一个特别大的实体类

96
00:05:31,790 --> 00:05:33,540
我在实体类里面有100个属性

97
00:05:35,620 --> 00:05:38,140
所以我就取消了前面的服务类

98
00:05:38,150 --> 00:05:40,710
你看,我就一个实体类

99
00:05:41,170 --> 00:05:42,400
这实体类就叫系统

100
00:05:43,900 --> 00:05:46,190
这个系统有100个属性

101
00:05:48,380 --> 00:05:49,820
那是没用的

102
00:05:50,030 --> 00:05:52,560
首先你这个类本身

103
00:05:52,570 --> 00:05:54,720
它要按照我们的一定的

104
00:05:54,730 --> 00:05:56,320
这种规则来建立

105
00:05:56,870 --> 00:05:59,860
还是我们前面讲的,没有冗余的规则

106
00:06:00,480 --> 00:06:02,310
包括前面的课程也说过了

107
00:06:03,170 --> 00:06:04,570
把各种各样信息

108
00:06:04,580 --> 00:06:06,770
按照没有冗余这种方式

109
00:06:07,970 --> 00:06:09,160
识别和建模

110
00:06:10,750 --> 00:06:13,540
然后需要各种形式的信息的时候

111
00:06:13,550 --> 00:06:17,170
通过集合运算计算出来

112
00:06:17,820 --> 00:06:19,060
而不是搞一个很大的

113
00:06:19,470 --> 00:06:21,950
里面有很多冗余

114
00:06:24,040 --> 00:06:28,800
那么这又是另外一种遮羞布

115
00:06:29,090 --> 00:06:31,990
他说,你看,我没有用服务类

116
00:06:32,780 --> 00:06:35,110
我就放实体类里面,实体类很大

117
00:06:35,120 --> 00:06:35,870
不对

118
00:06:38,410 --> 00:06:44,090
好,这是我们说的服务层里面的道理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1811033.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

citys

城市边界电子围栏 初始化摄像头、灯光等 let renderer, scene, camera, stats, gui, texture;renderer new THREE.WebGLRenderer({logarithmicDepthBuffer: true,});renderer.setPixelRatio(window.devicePixelRatio);renderer.setSize(window.innerWidth, window.innerHeigh…

如何实现单例模式及不同实现方法分析-设计模式

这是 一道面试常考题:(经常会在面试中让手写一下) 什么是单例模式 【问什么是单例模式时,不要答非所问,给出单例模式有两种类型之类的回答,要围绕单例模式的定义去展开。】 单例模式是指在内存中只会创建…

一颗万能的PD协议芯片,能芯Type-C PD协议芯片“ECP5705”, 它是如何实现PD直流风扇应用呢?

文章目录 文章目录 前言 一、PD风扇方案介绍 二、芯片介绍 三、PD风扇-供电方式 四、能芯科技 PD 协议芯片ECP5705-应用场景 总结 前言 随着USB Type-C接口的普及和PD取电芯片的出现,使得小型家电和电动工具可以通过统一的USB Type-C接口进行充电,极大地…

台灯学生用哪个牌子最好?学生台灯十大名牌排行榜分享

近年来,我们注意到儿童近视的现象呈现出增多且趋于低龄化的趋势。这一变化,部分原因可以归咎于孩子们越来越多地使用电子产品,另一部分则与他们面临的学业压力增加有关。鉴于此,家长们在挑选儿童学习用品时变得格外谨慎&#xff0…

js实现简单计算器词法解析语法解析解释器,带可视化界面

代码 Lexer是词法解析器 Parser是语法解析器 Interpreter 是ast解释器 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…

【启明智显芯片应用】Model3C芯片4.3寸拼图机应用方案

数据显示&#xff0c;618前期&#xff0c;早教启智、智能玩具、科学启蒙、数字阅读类产品销量增长迅猛。当下&#xff0c;90后新生代父母对于孩子的科学启蒙教育愈发重视&#xff0c;他们在给孩子选择学习产品时&#xff0c;越来越倾向于选择寓教于乐的益智类产品&#xff0c;而…

神奇!你见过生成Prompt的Prompt?

目录 先上干货 这个Prompt是怎么来的 道路是曲折的 总结 PART/ 01 先上干货 你怎么会想到这些场景呢&#xff0c;比如健身计划、英语学习、旅游规划等等&#xff0c;其实挺不好意思的&#xff0c;大家被我骗了&#xff0c;这些都是我使用一个Prompt解决的。 对&#xf…

使用OpenLLM在AMD GPU上的分步指南

Step-by-Step Guide to Use OpenLLM on AMD GPUs — ROCm Blogs 引言 OpenLLM是一个开源平台&#xff0c;旨在促进大型语言模型&#xff08;LLMs&#xff09;的部署和使用&#xff0c;支持多种模型&#xff0c;适应不同的应用&#xff0c;无论是在云环境还是本地环境中。在本教…

何为屎山代码?

在编程界&#xff0c;有一种代码被称为"屎山代码"。这并非指某种编程语言或方法&#xff0c;而是对那些庞大而复杂的项目的一种形象称呼。屎山代码&#xff0c;也被称为"祖传代码"&#xff0c;是历史遗留问题&#xff0c;是前人留给我们的"宝藏"…

丽水职业技术学院:以太彩光网络筑基教育信息化标杆之路

丽水职业技术学院作为教育信息化的先行者,是浙江省首批“浙江省高职高水平学校”、“浙江省教育信息化试点校单位”,也是“浙江省数字校园示范校”的一员。学院紧握“十四五”规划契机,全面加速数字化转型,旨在通过基础网络的革新、数字化教学的深化、信息服务的优化、学生管理…

wma和mp3哪个音质好?让我告诉你哪个更胜一筹

在数字音频领域&#xff0c;WMA和MP3是两种常见的音频格式&#xff0c;它们在网络上的音频传输和储存中都扮演着重要的角色。然而&#xff0c;许多人可能会对这两者之间的音质差异产生疑问&#xff0c;想知道哪一个更适合他们的需求。wma和mp3哪个音质好&#xff1f;在本文中&a…

Transformer介绍

Transformer的诞生 2018年Google发出一篇论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》, BERT模型横空出世, 并横扫NLP领域11项任务的最佳成绩&#xff01; 而在BERT中发挥重要作用的结构就是Transformer, 之后又相继出现XLNET&a…

如何制作MapBox个性化地图

我们在《如何在QGIS中加载MapBox图源》一文中&#xff0c;为你分享了在QGIS中加载MapBox的方法。 现在为你分享如何制作MapBox个性化地图的方法&#xff0c;如果你需要最新版本的QGIS及高清图源&#xff0c;请在文末查看获取软件安装包的方法。 新建地图样式 进入Mapbox Stu…

[2024-06]-[大模型]-[Ollama]- WebUI

主要涉及要部署的前端webui是来源于:https://github.com/open-webui/open-webui 正常就使用: docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-web…

MySQL—多表查询—练习(1)

一、引言 上几篇关于多表查询的基本几个部分全部学习完了。 多表查询的基本类型的查询包括以下&#xff1a; 1、内连接&#xff08;隐式内连接、显示内连接&#xff09;&#xff1a;... [INNER] JOIN ... ON 条件; &#xff09; 2、外连接&#xff08;左外连接、右外连接&…

中国蚁剑 安装教程 2024年5月

2024/5/11 中国蚁剑 安装教程 一、下载中国蚁剑的加载器和核心源码&#xff08;两个都要用到&#xff09; github官方下载地址&#xff1a;https://github.com/AntSwordProject/ 参考文档&#xff1a;antSword/README_CN.md at master AntSwordProject/antSword GitHub 核…

iPhone - 为什么姓名和付款都变成灰色?

问题描述 为什么姓名和付款都变成灰色&#xff1f;点开订阅也显示图 2 的无法连接&#xff1f; 原因分析 联网 WIFI 没有对『设置』开放权限。 解决方案 设置 - 无线局域网 - 使用无线局域网与蜂窝网络的App - 找到『设置』应用 - 勾选『无线局域网与蜂窝数据』

品牌渠道健康发展的关键与方法

一个品牌的渠道健康与否对其长期发展至关重要。品牌虽多&#xff0c;但并非所有产品都能成为品牌&#xff0c;创建品牌需大量精力&#xff0c;而让品牌长久健康发展则需多方面努力。 力维网络服务众多知名品牌&#xff0c;总结出一些渠道治理方法供品牌参考。首先&#xff0c;管…

Matlab 2024a 建模基础知识全面指南

一、Matlab简介 1. Matlab是什么&#xff1f; Matlab&#xff08;Matrix Laboratory&#xff09;是由MathWorks公司开发的一个高性能的数值计算环境和编程语言。它以其强大的矩阵运算能力、丰富的工具箱和便捷的数据可视化功能而闻名&#xff0c;广泛应用于科学研究、工程模拟…

IP协议(二)

TOC 一: 网段划分 同一个局域网的主机,要按一定的规则分配IP地址 把一个IP地址分为两部分: 前半部分 ,网络号 >用来表示局域网后半部分,主机号 > 用来区分同一个局域网中的不同主机 同一个局域网内部&#xff0c;主机之间的IP &#xff0c; 网络号相同&#xff0c;主…