有关DDD、IOC、OOP、AOP

1、DDD (domain-driven design)

domain-driven design,领域驱动设计,简称DDD。
目前很火的后端开发模型。通常这个模型用于前后端分离的后端项目中。我自己主要作为后端开发的角色,所以,我最常用的就是这个分层思想了:领域模型。
 
它主要分为:
  • 界面层(Host或UI):当然就是前端界面啦。一般是分离的,可能有专门的前端进行维护。
  • 应用层(Application):跟界面层打交道的服务层(Service),通常是以提供WebApi的方式跟界面层互动。
  • 数据共享层(Share):本层一般不是必需的,但建议您拥有。主要是定义服务接口,用于多方使用。同时,本层也可以定义Dto对象,即数据交换类。什么是数据交换类?一般我们不建议数据库实体(Entity)直接显示给前端使用,而是经过转换成一个模型(Model)后,再把这个数据给前端看。比如数据库中的字段有身份证敏感信息,如果你一股脑就把Entity暴露给前端,问题就大了。所以要有一个数据交换,也就是Dto。
  • 领域层(Domain):也就是我们三层结构中所说的业务逻辑层。是DDD的业务核心。负责连接应用层(Application)和数据仓储层(Database)。
  • 数据访问层(Database):好理解,就是操作数据库了。
关于DDD领域模型,目前最好的例子,是ABP(AspNet Boilerplate)。关于Abp是个什么东西,你可以自行搜索一下。
 
  
 

2、IOC(Inversion of Control)

inversion of control 控制反转,也称依赖注入(dependency injection)
参考:
 
目的:解耦。
创建被调用者的实例的工作由IOC容器来完成,然后注入调用者。

 

相关的几个概念:

依赖(Dependency):就是有联系,表示一个类依赖于另一个类

依赖倒置原则(DIP):设计模式六大原则之一,是一种软件架构设计原则(dependency inversion principle)

控制反转(IOC):一种软件设计原则,上层对下层的依赖(即底层模块的获得)交给第三方

依赖注入(DI):实现IOC的一种方式、手段

IOC容器:依赖注入的框架,用来映射依赖,管理对象创建和生存周期

 
好用的依赖注入容器:Unity
支持三种依赖注入方式:构造器注入ConstructorInjection、属性注入Property Injection、方法调用注入Method Call Injection
 
 
 

3、OOP/OO (object oriented programing)

 oop,也称oo,全称object oriented programing,面向对象程序设计。
特点是继承、多态和封装。
将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
 
 
 
 

4、AOP —— Aspect Oriented Programing

Aspect orienred programing,面向切面编程。是OOP 的延续。
实际使用中,AOP是在OOP编程时建立多个不用对象类的基础上,将类和类之间高度重合的部分提取出来成为切面,各个类可以在在合适的时机切入切出进行使用,以降低程序的耦合,并减少重合部分对类本身的影响。
——> AOP是使用切面(aspect)将横切关注点模块化,OOP是使用类将状态和行为模块化。
从根本上来说,AOP是对OOP的一个正向的补充。本质是通过代理对象来间接执行真实对象。(可以使用代理模式or装饰模式)
 
优点:

(1)将通用功能从业务逻辑中抽离出来,可以省略大量重复代码,有利于代码的操作和维护。也使得业务逻辑各部分的耦合度降低,,提高程序的可重用性,同时提高了开发的效率。

(2)在软件设计时,抽出通用功能(切面),有利于软件设计的模块化,降低软件架构的复杂度。(也就是说通用的功能都是一个单独的模块,在项目的主业务里面是看不到这些通用功能的设计代码的)、、

实现:

实现方式大致可以分为两类:动态代理和IL 编织两种方式。

(1)静态拦截

(2)动态代理:可参考微软企业库(MS Enterprise Library)里面的PIAB(Policy Injection Application Block)框架

(3)IL编织:安装PostSharp

(4)MVC里面的Filter

// 定义特性
public class AOPFilterAttribute : ActionFilterAttribute, IExceptionFilter
{……}

// 之后在controller中使用特性
[AOPFilter]
public JsonResult GetEditModel(string strType)
{……}
 
参考:

 

 

5、MVVM (Model—View—ViewModel)

视图层(View):就是界面层了,类似于html形式的,只不过在这里是用xaml语言来描述的。
模型层(Model):这个也很好理解,就是把界面上需要用到的属性参数啊什么的,构建成一个模型类即可,即建立一个Model类。这个Model类专门给这个视图界面使用的。
视图模型层(ViewModel):对于没有使用过WPF或者Xamarin的程序员来说,要理解这层可就头大了,因为它很难想明白。它的作用就是将Model类的对象,绑定到视图层View上。简单的说,就是负责绑定数据源,即给界面层的的控件的DataSource赋上值。
 
 
 
 
 
posted @ 2021-07-15 17:08  暴躁老砚  阅读(586)  评论(0编辑  收藏  举报