基于抽象的分层结构

抽象层次划分(Level of Abstraction) 作者:禅与计算机程序设计艺术 1.简介 抽象层次是计算机科学的一个重要的研究课题。它将计算机系统的各种功能和行为按照其组织结构、结构元素、功能模块等不同层次进行划分。通过合理的抽象层次设计,可以更好地理解系统的工作原理,提升软件开发效率,降低维护难度,并增加软件的可移植性和适应性。不同的抽象层次之间也存 阅读详情

基于抽象的分层结构

Author:Anders小明

(2008-1-8更新)

前言:现有已知的分层结构基本上是基于技术结构的,无论是SpringSide(早的还有AppFuse)还是DDD提出的分层结构,都是基于职责角色划分的。然而对于复杂的企业应用系统来说,仅仅以该纬度来划分,是无法完成逻辑的分解的。我们还需要基于抽象的分层纬度。

基于抽象的分层结构
众所周知:抽象是有排列的。进一步,在企业应用中,抽象的排列也是分层的;与此同时,抽象还是分模块的,定义良好的交互接口,保持抽象间交互的稳定是及其重要的。

抽象层次的划分是以业务概念划分为依据的,以保险系统为例,可以把抽象层次分为三层:保险其自身核心业务概念——核心抽象层,又受国家监管规则——国家抽象层,以及公司自身规则——公司抽象层。

如果说对于抽象的层次划分是纵向分类的话,那么模块划分就是横向分类。模块划分是较为常见的,不再举例。

对于抽象分层的,需要进一步的说明。如下为一个三层抽象的说明。白色为核心抽象层,水绿色为扩展抽象层,天蓝色为特定抽象层。

o_image001.gif 

对于抽象的分层,是符合人的思维逻辑的一种思考问题的方式,由简单到复杂。注意到白色为代表的核心抽象其覆盖面积是最小的,其边界也是最小。然后是扩展抽象,再然后是特定抽象。对抽象分层的第二个好处是:可以迭代地螺旋前进。

先看看核心抽象层:核心抽象层必须足够精巧而且稳定,因为他们是系统的最基本和最简单的结构!同时核心抽象层是可以运行的!他们的抽象和默认实现在全系统的地位——类似于数学系统的中的0和1!而具有复杂变化的扩展层和特定层就类似于数学中的2和3,然而,我们都知道,在数学中,0和1才是最重要的,没有0和1,数学系统是无法构建的。

对于抽象层次而言,面临的问题是如何保护抽象层次的边界,确保上层抽象的变更不会引起下次抽象的具体变更。这就要求下层抽象在扩展实现时委派逻辑到扩展抽象层中新的接口和抽象。这样即保证了核心抽象的基本语义,由保护了核心抽象的边界。

系统必须支持核心抽象层为下层抽象留下扩展的空间,基本的手段是通过暴露Factory,将扩展实现注入到核心抽象层次中;除了扩展,系统还需要支持替换(override),也是要暴露核心层的Factory,将替换实现注入到系统中;现在很多基于类似Spring的系统,可以借助Spring的Bean Override机制完成;

这样的抽象层次由于本身是完备和有边界的,他们可以被独立地维护。

在全系统下的核心抽象层是0和1,然而在考虑扩展抽象层时,该层就成为其特定抽象层的0和1,我们需要像构建核心抽象层一样来构建该层,以保持本身的完备性,边界以及扩展性。

如此反复迭代,随着系统外围的边界不断扩大,全系统所提供功能也越来越多,扩展点也就越来越多,系统支持的动态特性也越来越多!

基于Ultralytic实现多路摄像头目标检测 基于Ultralytic实现多路摄像头目标检测前面的文章分享了单路摄像头画面的YOLO目标检测,这篇文章主要分享一下多路摄像头画面的实时YOLO目标检测。测试环境在Windows系统下进行。 阅读详情

相关推荐

高等数学/概率论/数理统计/线性代数/离散数学面试-核心概念-问题理解

特征值与特征向量是线性代数中的概念,它们与线性变换有关。在线性变换中,如果存在非零向量 v ,使得当该向量通过变换后,其方向不变,只是长度发生了变化,那么这个向量 v 就是特征向量。而这个长度变化的比例因子,即变换前后向量长度的比值,称为特征值。数学公式表示:通俗易懂的解释:想象一下,你有一个可以伸缩的橡皮筋,这个橡皮筋可以代表一个向量。现在,你有一个特殊的机器,它可以改变橡皮筋的形状,但不会改变它延伸的方向。当你把橡皮筋放入机器中,机器会拉伸或压缩橡皮筋,但橡皮筋的方向保持不变。

m0_64198455的博客 2292

连载:面向对象葵花宝典:思想、技巧与实践(10) - “抽象” 详解

抽象的中文概念非常形象,简单来说就是“抽取出来比较像的部分”。   那么,在面向对象的领域里,抽取什么东西比较像的部分?   还记得前面给类下的定义么?我们一起来回顾一下:类就是一组相似事物的统称。 再结合我们对象的定义:对象就是一个具体的类,一个真实存在的类。 我们就很容易发现了抽象的详细含义:抽取多个对象或者类中比较像的部分。       注: 史派克:《猫和老鼠》中的斗

华仔-技术博客 4781

KUKA .RSI 软件包

KUKA RSI软件包通过XML文件使得机器人与外部设备(传感器通讯)通讯成为了可能,但仍存在诸多限制,该模块最多允许9台设备进行连接,有限的IO口,匮乏的功能,并且需要投入大量精力琢磨相关说明文档。为此开发人员针对KUKA实时通讯,做了一些开源的接口使得上位机与机械臂的通讯更为简单。

huhu7777的博客 3293

关于顶层接口,中层抽象类,下层实现类的理解 [java]

关于顶层接口,中层抽象类,下层实现类的理解 我们在异常框架或者集合框架中常常可以看到底层都是一些接口,然后中间是一些抽象类,然后下层就是一些实现类的现象,我们为什么要这样创建一个框架体系? 这里我们就以集合框架中的Collection分支进行解释: 首先:我们的Collection是一个接口,它表示实现了这个接口的类的所创建的集合对象中就只能加入有序的,以及不可重复的数据,这个时候我们就将根据两个特点来声明一些方法,这些方法我们只是在Collection接口中声明,但是我们并不去具体的实现,这个时候我们要到

m0_57001006的博客 488

手把手教你用VS Code + Codex在WSL中高效编程(避坑指南)

本文提供了一份详细的避坑指南,教你如何在WSL环境中高效配置和使用VS Code与OpenAI Codex。文章核心在于解决WSL内Codex扩展的OAuth登录失败问题,推荐将扩展安装在Windows本地,并通过UNC路径直接访问WSL文件系统,从而实现AI辅助编程与Linux开发环境的无缝结合,提升编码效率。

weixin_28677451的博客 1065

【论文阅读笔记】One Shot 3D Photography

论文主页:https://facebookresearch.github.io/one_shot_3d_photography/ 代码地址:https://github.com/facebookresearch/one_shot_3d_photography   该3D照片方向,由于刚入门,所以会倾向于翻译文章。每个操作上的选择,及为什么不进行另外操作的原因都如数放上。 论文小结   本作的工作是从单张RGB图片生成一个移动视角的3D照片。   其管道大致如下: 由RGB图像通过单目深度估计网络估计深度图

时光机 °的博客 1839

高等数字集成电路总结—国科大集成电路学院

数字集成电路国科大集成电路学院复习资料总结

weixin_43869218的博客 3044

【PyTorch】CNN(一维卷积Conv1D)实现时间序列预测

本文介绍了一维卷积神经网络(Conv1D)在时间序列预测中的应用,展示了其基本原理及实现方式。通过合适的数据预处理和模型调参,Conv1D可以有效地捕捉时间序列数据中的模式,从而进行精准预测。

走向CTO的路上... 1173

[随笔]抽象与分层

抽象与分层是计算机科学中的一种基本思想方法,是降低计算机系统复杂度的有效方法。 抽象,本质上是一种泛化与概括的思维方式。 在计算机中核心资源就是CPU和内存,我们对CPU计算过程抽象的就是函数,函数是计算过程的泛化。而对内存中数据的抽象就是数据结构,数据结构是数据组织方式的泛化,而对象的本质就是二者的结合,将一部分相关的数据看为一个整体,并且绑定一系列与数据相关的函数。而分层就是基于抽象来进行的

yz764127031的博客 2246

实现电脑同时上内网和外网(或通过外网访问到该电脑通过该电脑访问内网)

一、需求描述 目前使用的公司网络只能够上内网,但是又有上外网查资料的需求: ①想要实现电脑既能上内网的同时也可以上外网; ②想要使用其他外网电脑使用外网连接到该电脑,通过该电脑访问内部的网络内容。 二、准备内容 电脑必须具备两个网卡,即:可以同时连接内网和外网(比如我的笔记本就可以:使用网线连接笔记本网口与内网通讯,使用WIFI连接手机热点访问外部网络); 注意:如果只有一个网口,可以另外购买USB的无线网卡来实现上网卡。 三、实现电脑同时上内网和外网的操作步骤 3.1、网络拓扑图 ..

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2万+

【YOLOv8科研级优化】集成YOLOv10的SCDown采样模块,让你的模型下采样更高效更精准

打开确保模型解析器能识别SCDown模块。通过将YOLOv10的SCDown模块集成到YOLOv8中,我们实现了一个“细节保留+高效下采样”的目标检测模型。这个改进不仅在工程上能提升小目标、细粒度场景的检测效果,更在科研上提供了“分阶段下采样”的创新思路——这种思路可以延伸到其他卷积网络(如ResNet、MobileNet)的下采样层改进中,帮你在论文中打造独特的研究点。

m0_71589036的博客 137

php 抽象对象,PHP5.0对象模型探索之抽象方法和抽象类

面向对象程序通过类的分层结构构建起来,在单重继承语言如PHP中,类的继承是树状的. 一个根类有一个或更多的子类,再从每个子类继承出一个或更多下一级子类。当然,可能存在多个根类,用来实现不同的功能。在一个良好设计的体系中,每个根类都应该有一个有用的接口, 可以被应用代码所使用。如果我们的应用代码被设计成与根类一起工作,那么它也可以和任何一个从根类继承出来的子类合作。抽象方法是就像子类中一般的方法的占...

weixin_29740913的博客 190

NVP6324、NVP6188、NVP6158C的区别详解

根据搜索结果,NVP6324、NVP6188、NVP6158C是Nextchip公司推出的不同型号视频处理芯片,主要区别体现在应用场景、功能特性、接口支持及封装规格等方面。如需进一步技术细节(如寄存器配置或开发支持),可参考具体型号的规格书或联系Nextchip代理商。

小灰灰的博客 3004

接口,抽象类,实体……

API的的分层结构,以及接口,抽象类,实体类的关系 接口:把某个功能或者某个模块抽象出来,先定义了他们能干什么,也就是写成抽象方法,即规定了每个方法的方法名,参数列表,返回类型,相对于项目来说,就是告诉下面的程序员,当你要在这个功能模块下开发方法的具体实现的时候,为了统一与

wph_1129一直为改变|技术blog:wph4u.net 577

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

通过一个程序来理解PHP里面的抽象类【1】

面向对象程序通过类的分层结构构建起来. 在单重继承语言如PHP中, 类的继承是树状的. 一个根类有一个或更多的子类,再从每个子类继承出一个或更多下一级子类. 当然,可能存在多个根类,用来实现不同的功能. 在一个良好设计的体系中,每个根类都应该有一个有用的接口, 可以被应用代码所使用. 如果我们的应用代码被设计成与根类一起工作,那么它也可以和任何一个从根类继承出来的子类合作. 抽象方法是就...

weixin_34107739的博客 83

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

H.264/AVC 的分层结构与画面划分

上篇我们对H.264/AVC做了简单的介绍,尤其是它的主要改进方面。在接下来的几篇中,我们会由浅入深,一步一步来探索H.264。在讲解顺序方面,我参考了毕厚杰的《新一代视频压缩编码标准》。先从H.264标准的编码方法入手,这包括它的分层结构、画面划分、帧内和帧间编码方式、整数变换和量化、CAVLC和CABAC,然后再从H.264码流的角度,来分析它的句法和语义。 当然这里并不会全部介绍,毕竟不是写...

houxiaoni01的博客 1482

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

.NET WPF 控件类分层结构

在 WPF 中,类的层级结构设计是为了实现线程安全、依赖属性、可视化渲染、布局和交互等功能。以下是 WPF 核心基类的逐级说明,从最底层到最顶层:作用:提供与 WPF 线程模型(Dispatcher)的集成,确保对象只能被创建它的线程访问(UI 线程)。所有 WPF 对象必须继承自 ,以保证线程安全。核心方法::检查当前线程是否有权访问对象。:如果当前线程无权访问,抛出异常。示例场景:继承自:作用:支持 依赖属性(Dependency Properties) 和 附加属性(Attached Properti

Winemonk 1039

计算机网络——分层结构

计算机网络——分层结构

weixin_59796310的博客 1563

抽象方法和抽象类

面向对象程序通过类的分层结构构建起来. 在单重继承语言如PHP中, 类的继承是树状的. 一个根类有一个或更多的子类,再从每个子类继承出一个或更多下一级子类. 当然,可能存在多个根类,用来实现不同的功能. 在一个良好设计的体系中,每个根类都应该有一个有用的接口, 可以被应用代码所使用. 如果我们的应用代码被设计成与根类一起工作,那么它也可以和任何一个从根类继承出来的子类合作. 抽象方法是就像子类中

passtome的专栏 468

PHP5.0对象模型探索之抽象方法和抽象类

 面向对象程序通过类的分层结构构建起来,在单重继承语言如PHP中,类的继承是树状的. 一个根类有一个或更多的子类,再从每个子类继承出一个或更多下一级子类。当然,可能存在多个根类,用来实现不同的功能。在一个良好设计的体系中,每个根类都应该有一个有用的接口, 可以被应用代码所使用。如果我们的应用代码被设计成与根类一起工作,那么它也可以和任何一个从根类继承出来的子类合作。   抽象方法是就像子类中一

huagaigs的专栏 173

软件架构风格>过程控制风格

C.应该采用分层结构,因为分层结构很好地组织了用来协调机器人操作的构件,系统结构更加清晰 D.应该采用分层结构,因为抽象层的存在,满足了处理不确定性的需要:在较低层次不确定的实现细节在较高层次会变得确定。以下对于这两种候选架构的选择理由,错误的是( A )。分层结构的特点是通过引入抽象层,在较低层次不确定的实现细节在较高层次会变得确定,并能够组织层间构件的协作,系统结构更加清晰。B.应该采用闭环控制结构,因为闭环控制架构中机器人的主要构件监控器、传感器、发动机等)是彼此分开的,并能够独立替换。

huaqianzkh的专栏 206
上一篇: 业务行为的分析和设计
下一篇: 基于抽象的分层结构
林仪明
博客等级 码龄25年 313粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值