【概念篇】浅谈 AOP、OOP、DDD、IOC

news2024/10/5 16:26:03

前言
        在招聘要求中,有没有经常看见,对AOP、OOP、DDD、IOC有一定的认识,能够自主开发模块,这一类的要求。听起来是不是挺高大上,然后百度一搜,给你出来一堆概念性的东西——结果就是,东西没学会,人也晕了,最后还浪费时间。但实际上,这些东西在我们日常开发中多数都有用到,只是不明白这些专业名词,仅此而已。

一、概念
首先还是解释一下吧:
AOP(Aspect-Oriented Programming):面向切面编程
OOP(Object-Oriented Programming):面向对象编程
DDD(Domain-Driven Design):领域驱动设计
IOC(Inversion of Control):控制反转
下面我尽量用,最简短的话解释一下,这些名词的含义。

AOP(Aspect-Oriented Programming):面向切面编程
        这个名字挺容易误导人的说实话,我们先看名字,Aspect,方面,大多数情况下指的是一件事情的不同维度、或者说不同角度上的特性,比如我们常说:“这件事情要从几个方面来看待”,往往意思是:需要从不同的角度来看待同一个事物。这里的“方面”,指的是事物的外在特性在不同观察角度下的体现。而在AOP中,Aspect的含义,可能更多的理解为“切面”比较合适。
        主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等等。
        主要意图:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
        结论:这里参考了挺多文献,最终得出的结论就是,将系统的某一个功能提取出来,作为单独的模块,只负责完成自己的那一部分功能,仅此而已。可以有效降低系统各部分之间的耦合性。

OOP(Object-Oriented Programming):面向对象编程
        听名字跟AOP很像,但含义完全不同。
        面向对象程序设计(Object Oriented Programming,OOP)是一种计算机编程架构。OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。OOP=对象+类+继承+多态+消息,其中核心概念是类和对象。
        主要特性:表现为封装、继承、多态。
        这里不多谈,不会的自己打开课本学习基础知识去。

DDD(Domain-Driven Design):领域驱动设计
        谈到这个,就不得不说另一个程序设计架构:三层架构,表示层(UI B/S 文献说是信息系统中的 Web浏览页面,个人理解为控制器接口层,负责承上启下 不包含太多逻辑)、业务逻辑层(BLL处理业务相关逻辑功能)、数据访问层(DAL只负责访问数据库,不包含任何业务逻辑),当然你也可以写一个基础设施层 utils、infrastructure或common作为聚合。

 

DDD(Domain-Driven Design):领域驱动设计,为三层架构的进阶版本,主要区别为思想上的一个转变。 通过作用领域划分逻辑区块,主要表现为 表现层(UI)、应用层(控制器)、领域层(Mode,Service,Repository)、基础设施层。参考下图

 


IOC(Inversion of Control):控制反转
        定义: 使用对象时,由主动New变成从外部提供对象,在这个过程中,对象的控制权由程序转移到外部,这个思想成为控制反转。
        作用: 如下图,大家想想一个类依赖多了之后,创建new一个对象,可能要new一堆它的爸爸、爷爷、曾爷爷,太麻烦了。而IOC就是为解决这个问题而诞生的,你不用自己创建,只需要找别人拿就行了。(不要问这个别人是谁,他是框架,你直接用就行了,当然你有能力也可以自己写一个)

 

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

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

相关文章

《LKD3粗读笔记》(14)块I/O层

什么是块设备? 系统中能够随机访问固定大小数据片的设备被称为块设备,这些数据片称作块,最常见的块设备是硬盘。什么是字符设备? 字符设备按照字符流的方法被有序访问,像串口和键盘就都属于字符设备。这两种设备的区别…

从零开始搭建 Lsky Pro 兰空图床

本文源码:https://github.com/chen2438/chenhaotian.top/tree/main/source/_posts/linux-app/lsky.md 在我的博客上查看:https://chenhaotian.top/2022/12/30/linux-app/lsky/ 从零开始搭建 Lsky Pro 兰空图床 官方教程 安装环境 使用OneinStack安装…

第五章 面向对象-8.enum 枚举

enum 枚举 枚举的实例对象是固定的,实例是自动new,每个枚举类会自动继承java.lang.Enum 抽象类 如何声明枚举? 所有枚举类都是java.lang.Enum的子类,无需用extends来继承,如下是枚举类拥有的常用方法 方法名称说明…

测试报告框架 —— Allure2测试报告

目录 Allure2测试报告 1、使用 Allure2 运行方式-Python 2、使用 Allure2 运行方式-Java 3、生成测试报告 4、Allure2 报告中添加用例标题 5、allure2报告中添加用例步骤 6、allure2报告中添加用例链接 7、allure2报告中添加用例分类 8、Allure2 报告中添加用例描述 …

【面试题】前端必修-浏览器的渲染原理

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 1.浏览器的渲染原理 #浏览器是如何渲染页面的 1.什么叫渲染 render 当我们输入一个url地址的…

新书上市 | 从大脑认知开始,全方面提高编程能力,助你摆脱“GPT焦虑症”

目录 一、ChatGPT火爆全网二、《程序员超强大脑》三、本书内容四、本书特色五、作译者简介1、费莉安赫尔曼斯(Felienne Hermans)2、蒋楠 大家好,我是哪吒。 🏆本文收录于,49天精通Java从入门到就业。 全网最细Java零…

程序人生-Hello’s P2P

摘要 本文讨论了与编程和软件开发相关的几个关键概念和过程。首先介绍了链接的概念和作用,它是将代码和数据片段组合成单一文件的过程,使得分离编译成为可能,从而可以更好地管理和修改模块。接下来探讨了进程的概念和作用,进程是正…

图像数据处理

文章目录 1:TFRecords1-1 将MNIST数据集转换成TFRecord格式1-2 读取TFRecord文件中的数据 2:图像数据的预处理2-1 处理图像编码2-2 调整图像大小2-3 剪裁和填充2-4 按比例剪裁2-5 图像翻转2-6 图像亮度调整2-7 图像对比度调整2-8 图像色相调整2-9 图像饱…

chatgpt赋能Python-python_99乘法

Python编程实现——99乘法表的生成 Python编程语言是一种高级程序设计语言,具有简单易学、可移植性强、功能强大等特点,受到广大开发者的喜爱。Python可以被应用于网站开发、数据分析、人工智能、机器学习等多个领域。而在Python编程中,生成…

《程序员面试金典(第6版)》面试题 02.06. 回文链表(双指针(快慢指针),查找链表中间节点,反转链表)

题目描述 编写一个函数,检查输入的链表是否是回文的。 题目传送门~:面试题 02.06. 回文链表 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进…

蓝桥杯单片机串口通信学习提升笔记——部分2

今日继续学习提升蓝桥杯国赛能力水平。 有道是:卜心事、灯花无语,百感孤单,鸳被羞展...... 梦方圆,又丛钟、声声惊断。 诗人杨玉衔孤单影只,偏偏又多遭磨难,一路坎坷...... 正如我近日来学习提升串口通信…

数据结构学习分享之链式二叉树(一)

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:数据结构学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你了解更多数据结构的知识   🔝🔝 1. 前言 在学习链式二叉树…

【Linux】shell编程—awk编辑器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、awk编辑器1.工作流程3.常用选项 二、awk的基础用法1.输出文件中的某一列2.根据特定条件筛选数据3.按照分隔符进行切割4.在匹配到特定字符串时执行操作5.BEGIN打…

chatgpt赋能Python-pythonwxpy

Python的wxpy模块:一款强大的微信机器人框架 在当今数字时代,微信已经成为了大家日常生活中不可缺少的应用。wxpy是一款使用Python语言的微信机器人框架,可以帮助用户实现诸如自动回复、消息提醒、定时发送消息等自动化操作。它的易用性、强…

(5)---STM32 的时钟系统

目录 1.时钟基本概念 时钟源常见振荡器 振荡电路 晶体振荡器 RC振荡器 2.G030时钟源 3.时钟树 4.STM32CubeMX时钟树配置 1.时钟基本概念 1) 时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作, 外设部件…

基于redis客户端缓存机制实现本地缓存

文章目录 前言一、本地缓存和分布式缓存二、redis客户端缓存机制1.客户端缓存实现原理普通模式广播模式重定向模式redirect 2.优势和误区3.客户端缓存机制请求流程 三、项目实战1.引入依赖2.redis连接属性配置3.开启客户端缓存4.使用本地缓存5.测试 总结 前言 采用缓存一直是我…

VMware ESXi 6.0 U3 Final - ESXi 6 系列最终版下载

VMware ESXi 6.0 U3 Final - ESXi 6 系列最终版下载 VMware ESXi 6 Standard 请访问原文链接:https://sysin.org/blog/vmware-esxi-6/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org VersionRelease NameRelease …

RLHF中的PPO算法原理及其实现

RLHF中的PPO算法原理及其实现 ChatGPT是基于InstructGPT实现的多轮对话生成式大模型。ChatGPT主要涉及到的技术包括: 指令微调(Instruction-tuning);因果推断(Causal Language Modeling);人类…

从零开始Vue3+Element Plus后台管理系统(十五)——多语言国际化vue I18n

i18n国际化的内容比较多,写文章的时间也用得比较长,从上周五开始到本周一,断断续续完成了。 虽然实际工作中很多项目都不需要国际化,但是了解国际化的用法还是很有必要的。 i18n Vue I18n 是 Vue.js 的国际化插件。它可以轻松地…

PFC-FLAC3D Coupling Examples

目录 PFC-FLAC3D Coupling Examples Punch Indentation of a Bonded Material Sleeved Triaxial Test of a Bonded Material 命令流 结果 PFC-FLAC3D Coupling Examples Punch Indentation of a Bonded Material 这个例子展示了一个粘合颗粒模型(BPM&#xff0…