前言
在招聘要求中,有没有经常看见,对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就是为解决这个问题而诞生的,你不用自己创建,只需要找别人拿就行了。(不要问这个别人是谁,他是框架,你直接用就行了,当然你有能力也可以自己写一个)