文章

learn - 面向对象设计(OOD)

面向对象设计方法是OO方法中一个中间过渡环节。 OOD(Object-Oriented Design,OOD)的目标是管理程序内部各部分的相互依赖。这种依赖关系的转换使得系统的各部分具有了可复用性。 OOD是一种解决软件问题的设计范式(paradigm),一种抽象的范式。使用OOD这种设计范式,我们可以用对象(object)来表现问题领域(problem domain)的实体,每个对象都有相应的状态和行为。

learn - 面向对象设计(OOD)

对象(object)

用分层方式定义出对象

  • Value Object值对象,View Object表现层对象

    主要对应界面展示的数据对象,用于展示层,它的作用是把某个指定页面、组件等所有数据封装起来。

  • DTO( Data Transfer Object) 数据传输对象

    泛指用于展示层与服务层之间的数据传输的对象,还有一种情况就是在需要跨进程或远程传输(RESTful请求)时的传输对象,它不应该包含业务逻辑。(微服务之间数据传输)

  • PO(Persistant Object) 持久对象

    它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。

  • BO( Business Object)业务对象

    主要用于service层或service之间数据封装。BO主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。

    通常一个 BO 包含多个 PO,通常需要将 BO 转化成 PO,才能进行数据的持久化,反之,从 DB 中得到的 PO,需要转化成 BO 才能在业务层使用。BO 建议只包含业务方法。

  • DO(Data Object) 数据对象

    在绝大多数情况下,DO和PO是一一对应的,没有任何差异,在某些场景中存在差异(DO在某些场景下不需要进行显式的持久化;PO的某些属性值对于DO没有任何意义)。

  • DAO(Data Access Object)数据访问对象

    它是一个面向对象的数据库接口,负责持久层的操作,为业务层提供接口,主要用来封装对数据库的访问,常见操作无外乎 CURD。我们也可以认为一个 DAO 对应一个 PO的对象,它位于业务逻辑与数据库资源中间,可以结合 PO 对数据库进行相关的操作。

三层技术架构

表现层业务层持久层
VOVO数据对象-DO-(Data Object)
数据传对象-DTO- (Data Transfer Object)DTO持久对象-PO-(Persistant Object)
 业务对象-BO-(Business Object)数据访问对象-DAO-(Data Access Object)
 DO 

每层的介绍如下:

1、表现层(View、ViewController Layer):负责与用户交互,展现数据,将用户的操作转化为程序能够理解的格式。(多指前端代码)

2、业务控制层(PresenterController Layer 、Business Service Layer)::一是处理表现层转发过来的前端请求(也就是具体业务),二是将从持久层获取的数据返回到表现层。(可以拆开:控制层+服务层)

3、持久层(Model、Data Layer):直接与数据库交互,负责数据的增删改查操作。(可以拆:数据访问层DAL+数据存储层)

五层技术架构

表现层控制层服务层数据访问层数据层
VOVODTODAOMySQL
 DTOBODMORedis
  DODO 

每层的介绍如下:

1、表现层(Presentation Layer):负责与用户交互,展现数据,将用户的操作转化为程序能够理解的格式。(可以是前端代码;可以是服务数据类型格式json、xml)

2、控制层(Control Layer):处理用户的输入,并将请求转发到适当的服务层。它主要负责应用程序的业务逻辑。(服务端可控制输入、输出)

3、服务层(Service Layer):负责处理复杂的业务逻辑,它调用数据访问层以获取所需数据,并对其进行处理。

4、数据访问层(Data Access Layer):数据访问层直接与数据库交互,负责数据的增删改查操作。

5、数据层(数据存储层)(Data Layer):数据层封装数据库的具体实现,可以是一个关系型数据库或非关系型数据库。

OOP 、FP、PP

面向对象编程(OOP)、面向函数式编程(FP)和面向过程编程(PP)是三种不同的编程范式,它们的差异在于它们如何处理数据和如何组织代码。

  • 面向对象程序 (Object Oriented Programming,OOP)

    面向对象编程的核心思想是以对象为中心,将数据和相关操作封装在一个对象中。

    OOP 中的对象是由类定义的,并且类定义了对象的数据结构和行为。

  • 面向函数式编程 (FP)

    面向函数式编程的核心思想是以函数为中心,以纯函数的形式实现业务逻辑。

    在 FP 中,数据不可变,并且通过将函数组合在一起来实现复杂的逻辑。

  • 面向过程编程 (PP)

    面向过程编程的核心思想是以过程为中心,通过程序的执行顺序来实现目标。

    PP 中的数据可以随程序的执行而改变,并且程序通过调用不同的过程来实现目标。

OOD 与 OOP

面向过程分析 POA(Procedure Oriented Analysis):是一种以过程为中心的编程思想,以数据流向为主要导向。

面向过程设计 POD:它是纯面向过程的一种组织业务逻辑的方式。有点像画流程图,反应数据从开始到结束的过程。

面向对象分析 OOA(Object Oriented Analysis):是一种以对象为中心的编程思想。利用从问题域中的词汇表中找到类与对象。

面向对象设计(Object-Oriented Design,OOD)

前提要有要有分层思想。

正确有效的构造出复杂系统的抽象结构,将OOA后的结果,作为OOD的模型.。

通常用于展示被设计系统的逻辑模型(业务逻辑如何设计),物理模型(系统如何划分,层次如何划分,如何部署……),静态模型(组成系统的元素:类,接口)和动态模型(对象的调用……)。将OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。

常用的表示法手段:UML各种图形。

需要注意的是:层次结构并非就一定是三层结构,也可以是多层,具体分几层需要根据项目的复杂度来决定,如果没有过多的业务逻辑,只有简单的CRUD的话,那么三层结构足以应付一切。

面向对象程序设计(Object Oriented Programming,OOP)

将面向对象设计(OOD)后的抽象,采用面向对象的方式来实现的方法,就叫做面向对象编程。

在这种方法中,程序被组织成许多相互协作的对象,每个对象都是一个类的实例。利用对象构成业务逻辑的组成基本元素(组合模式的层次结构),而不是采用算法。

组成程序的基本元素是一个又一个的基础组件(类),那么组件就是我们层次结构所对应的接口或接口的实现类,那么程序就是由一个又一个实现类的实例相互协作来完成业务逻辑的实现。

领域驱动设计 DDD

领域驱动设计(Domain-Driven Design)

DDD强调对业务领域进行抽象和建模,将复杂的业务逻辑划分为多个子域(Sub-Domain),然后针对每一个子域去设计相应的领域模型。

 DDDOOD
拆分单元子域(Sub-Domain)对象(Object)
实现领域模型是核心,程序员需要将领域模型转换成代码实现,保证代码和领域模型的一致性。程序员需要根据分析模型进行相应的编程实现。
主导方向领域模型分析模型和设计模型
侧重点强调从实际业务出发进行领域建模和通用语言的建立,将领域模型和代码实现保持一致性系统的架构、数据的组织等技术层面

另外可以着手对边界的定义。

本文由作者按照 CC BY 4.0 进行授权