APP下载

领域驱动设计在构建校园防私接系统中的应用研究

2022-05-27党嘉楠

科技与创新 2022年10期
关键词:开发人员客户端驱动

党嘉楠

(西安交通大学软件学院,陕西 西安 710049)

1 研究背景

在互联网开发“小步快跑,迭代试错”的大环境下,DDD(领域驱动设计)似乎是一种比较“古老而缓慢”的思想。然而,随着互联网公司逐渐深入实体经济,业务日益复杂,在开发中也越来越多地遇到传统行业软件开发中所面临的问题,如过度耦合、贫血症(贫血领域对象,Anemic Domain Object,是指仅用作数据载体而没有行为和动作的领域对象)和失忆症。而使用领域驱动设计思想可以很好地解决这些问题。为了降低系统耦合程度,在软件的设计阶段,基于领域驱动的建模需要软件开发人员和相关领域专家结合软件开发人员的专业技能和领域专家的专业知识,建立准确的领域模型,以更好地响应需求变更,并缩短软件开发周期。为了解决贫血症和失忆症问题,建立的多个领域模型都应阐述现实中的实际问题,使相关软件开发人员易于理解业务,对系统进行快速的维护和迭代。

2 领域驱动设计

领域驱动设计(Domain-Driven Design,简称DDD)是一种在软件设计中应该遵循的思维方式,其目标在于加快具有复杂需求的软件项目的研发速度[1]。领域驱动设计可以实现对应到持续进化的模型。领域驱动设计中最重要的理念是通过构建领域模型来解决软件开发的复杂性问题[1],因为在大多数软件项目中,最困难的往往是解决业务领域复杂性,而非技术复杂性。领域驱动设计的一个显著特征就是设计与开发的绑定,领域驱动设计强调软件设计概念必须在开发过程中得以成功实现[2]。

领域驱动设计的前提是把项目的主要重点放在核心领域(Core Domain)和领域逻辑中;以领域中的模型为基础,进行复杂的设计;让软件开发人员与领域专家合作,以迭代方式来完善特定领域问题的概念模型。

领域驱动设计的核心原则是模型设计概念必须在代码中成功实现,否则,它们将会变成抽象的讨论。将模型与实现相绑定意味着在设计模型时既要反映业务概念又要考虑程序的实现,这使得我们在选择模型要做更多的考量,并且通常会经历多次反复修改和重新设计的过程。但是这样的过程带来的价值也是巨大的。将模型与实现相绑定,保证了程序代码忠实地反映了领域知识的要求,有助于确保软件正确地满足用户的需求。另一方面,由于代码是严格按照领域模型来实现的,意味着开发人员与业务专家们有了共同的语言,这有助于他们之间展开高效的协作。

3 业界流行防私接系统设计

3.1 客户端防私接技术

3.2 非客户端防私接技术

由于客户端防私接技术需要强制学生用户安装客户端,易引起学生的反感而遇到较大推行阻力,由此产生了非客户端的防私接技术,在不要求学生安装任何客户端的情况,通过对学生上网的数据进行应用特征的分析从而发现用户的私接行为[3]。非客户端防私接技术主要是对学生上网的流量报文进行监控,基于深度包检测(DPI)技术、通过识别用户接入设备类型和接入数量,确定用户是否存在私接行为的监控手段。与基于客户端检测的方法相比,流量防私接部署相对简单,用户无感知,但是实现技术比较复杂,准确性和识别率存在问题。

4 基于领域驱动设计的校园防私接系统的设计

在分析业界主流防私接系统的基础上,发现不管是客户端防私接系统还是非客户端防私接系统,系统耦合情况非常严重,软件开发人员难以维护和迭代。因此基于领域驱动设计思想和校园防私接的需求基础上,创新地提出了校园宽带防私接整体方案。

4.1 校园防私接系统顶层设计

将整个系统分为5个大模块,将业务架构映射到系统架构上,实现高内聚低耦合。

Horus Manager模块:防私接平台中的管理节点,它可以在Site模式和Controller模式下运行(相同的应用程序在不同的模式下运行)。Site和Controller使用RabbitMQ相互通信。在Controller模式下运行的Horus Manager也是一个Site,但提供了一组REST API来定义/控制和管理集群。

Console模块:防私接平台前端Web控制中心,直接与Horus Manager进行交互。

Client模块:一款带防共享功能的拨号管理客户端,包含Windows、MacOS、iOS、Android下的一系列客户端。

IVS(Identity Verification Service)模块:与客户端进行心跳机制验证的后端模块。客户端拨号后,与心跳服务器之间按预定或协商的算法通讯;服务器通过检查数据是否按时到来、是否有效,来判断客户端是否还在线,是否伪造的客户端。

主题学习模式 20世纪60年代,美国教育者热衷于将学习目标进行分类研究,如布卢姆把教学目标分为三个领域,但在实践过程中发现这三个领域实际是一个整体,这种分类方法造成它们之间相互分离。所以,20世纪90年代中期,整合课程研究的热潮在美国兴起,主题学习作为整合教学目标的有效方式,开始被广泛应用。

Trafficam(Network Traffic Monitor)模块:是防私接平台的一个流量监控应用模块。它接受传入的网络流量对象(例如pcap、suricata-eve等)并尝试从中提取信息并以持久的方式保留这些信息。

系统架构关系如图1所示。

图1 系统架构关系图

4.2 Horus Manager模块架构设计

Horus Manager模块是整个系统中的核心,也是业务逻辑最复杂的一部分。使用领域驱动设计思想设计该模块,可以有效降低系统复杂度,有利于软件开发人员快速开发和维护。

将一个复杂的程序切分成层。开发每一个层中内聚的设计,让每个层仅依赖于它底下的那层。遵照标准的架构模式以提供层的低耦合。将领域模型相关的代码集中到一个层中,把它从用户界面、应用和基础设施代码中分隔开来。

因此,Horus Manager模块的总体框架基于领域驱动进行设计,分为4层,具体如下。

API层(用户接口层):本层的主要功能是提供接口使后端与前端进行交互。在实现过程中,要先确认与前端进行交互的各种DTO,用于满足系统前后端交互数据的安全性。其次,使用外观模式(Facade Pattern)隐藏系统的复杂性,给前端提供一个统一入口,并对外屏蔽内部子系统的调用细节。

Application层(应用层):本层是很薄的一层,本层的主要功能是是用于协调各种应用情况。本层主要负责DTO和实体值对象的数据转换,对于简单的业务,也可以在本层直接加载实体,执行实体行为方法。本层不包含业务逻辑,注意本层可以包含查询逻辑,但核心业务逻辑必须下沉到Domain层。本层不保留业务对象的状态,只保有应用任务的进度状态。

Domin层(领域层):本层是领域驱动设计思想中最重要的一层,包含关于系统领域的信息。本层是业务软件的核心所在,在本层实现核心的业务逻辑。只有在本层可以保留业务对象的状态,对业务对象和它们状态的持久化被委托给了Infrastructure层。

Infrastructure层(基础设施层):本层主要功能是对Domin模块进行持久化。本层可以把领域对象序列化到指定的元件中,如数据库、文件或者内存对象,当然也提供从物理元件取出数据到领域对象的功能。本层作为其他层的支撑库存在,提供了层间的通信,实现了对业务对象的持久化。

4.3 Horus Manager模块核心功能设计

Horus Manager模块最重要的功能就是接收IVS模块与Trafficam模块传来的信息,分析并判断该用户是否私接。对此,当然可以使用复杂的业务逻辑对此进行判断。但当开发此功能的软件开发人员离职后,其他软件开发人员接手此系统时,会发现此业务逻辑非常难以理解,需要花费大量时间读懂这些业务逻辑。于是需要基于领域驱动设计思想解决该问题,我们发现判断一个人是否私接与现实生活中司法系统判断一个人是否有罪有异曲同工之妙,因此基于现实中的司法系统对解决该问题进行建模,可以使没有开发此系统的软件开发人员易于理解复杂的业务逻辑。

现实中的司法系统判断一个人是否有罪需要经过搜集证据、诉讼、定罪、执法4步。因此,基于司法系统对判断该用户是否私接进行建模,建立CaseInstance、Prosecution、Conviction、Enforcement这4个主要实体。CaseInstance表示会话,其中保存着会话的私接证据、身份信息、网络信息等;Prosecution表示诉讼过程;Conviction表示定罪过程;Enforcement表示执法过程。这样建模将原本复杂的判断私接过程拆分开来,使相关软件开发人员易于理解,因为司法系统本就是现实中存在的东西,就此实现和维护功能将变得非常简单。4个核心实体的类图如图2所示。

图2 核心功能类图

Horus Manager模块的核心功能如下。

对用户会话进行管理:案件管理、登记和结案。从RADIUS服务器接收RADIUS计费数据包以创建和销毁会话。

获得私接证据过程:实施“身份验证”协议并处理来自已知客户端应用程序(IVS)的协商和通知,监控网络流量并从网络流量中提取已知数据库的信息(Trafficam)。接受来自IVS/Trafficam的案件调查。

进行诉讼过程:案件调查适用条例。

进行定罪过程:根据组织/用户组和配置的策略定罪案例。

进行执法过程:执行强制(断开连接、限速或阻止私接账号使用操作),将判决结果发送给BAS(高校宽带运营管理平台)进行执行。

5 结束语

校园防私接系统应用领域驱动设计思想进行设计开发,降低了系统耦合度,使系统易于维护和迭代。领域驱动设计的最大优势是直接将核心业务逻辑与领域模型结合起来,更好实现高内聚、松耦合,这种优势逐渐使其成为软件设计的主流思想,特别是面对大型复杂的互联网系统。同时现如今的企业发展也越来越重视维护和迭代,所以领域驱动设计也会取得越来越广泛的应用。在进行系统设计时,需要按照需求合理设计模型。在进行分层建设过程中,也需要充分考虑好各种不必要因素,及时调整,选择合理框架以及开发系统,提高运行效率。

猜你喜欢

开发人员客户端驱动
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
基于模糊PI控制的驱动防滑仿真系统分析
Semtech发布LoRa Basics 以加速物联网应用
虚拟专用网络访问保护机制研究
新闻客户端差异化发展策略
AMD VS微软 SSD的AHCI驱动选哪家
后悔了?教你隐藏开发人员选项
三星SMI扩展Java论坛 开发人员可用母语
浅析IEEE 802.1x及其客户端软件