框架设计总结

用户头像
Mars
关注
发布于: 2020 年 09 月 27 日



编程历史看面向对象编程的本质和未来

面向过程编程语言本质是面向逻辑的,逻辑是线性的,当开发大型、复杂的系统,线性逻辑就会难免的耦合,随着系统越大,耦合程度越大。面向对象编程就是解决这种耦合问题。

编程语言实质

目的:用计算机解决现实世界问题。

编程过程:在计算机所能理解的“模型”(解空间)和现实世界(问题空间)之间建立一种联系。

编程语言是一种“抽象”机制,问题是对“谁”的抽象。





面向对象编程描述:

l  万物皆对象;

l  程序是对象的集合,它们通过发送消息来告知彼此所要做的;

l  每个对象都有自己的由其他对象所构成的存储;

l  每个对象都拥有其类型;

l  某一特定类型的所有对象都可以接收同样的消息;

 

面向对象编程与面向对象分析

面向对象编程不是使用面向对象编程语言进行编程,而是利用多态特性进行编程。

面向对象分析是将客观世界,即编程的业务领域进行对象分析。

l  充血模型与贫血模型

l  领域驱动设计DDD

 

面向对象设计的目的和原则

面向对象设计目的:强内聚、低耦合,从而是系统

       易扩展-易于增加新功能

       更强壮-不容易被粗心程序员破坏

       可移植-能够在多环境运行

       更简单-容易理解、容易维护

面向对象设计原则:

       未达到上述目标,总结出多种指导原则。

       原则是独立于编程语言的,甚至可以用于非面向对象的编程语言。

设计模式

设计模式是解决某一种问题的通用的解决方案。

设计模式也是语言中立的。

设计模式贯彻了设计原则。

 

3大类23种基本的设计模式

l  创建模式

l  行为模式

l  结构模式

 

框架

框架是用来实现某一类应用的结构性的程序,是对某一类架构方案可复用的设计与实现。

n  如同框架的大厦结构

n  简化应用开发者的工作。

n  实现多种设计模式,使得开发者不用花太大力气,就能设计出结构良好的程序来。

 

糟糕代码特点

僵化性:很难对系统进行改造,每个改造都会迫使系统其它部分的改动。

脆弱性:对系统的改动会导致系统跟改动无关的地方出现问题。

牢固性:系统耦合太紧密,无法使部分功能成为可重用的组件。

粘滞性:由于系统原有的设计,为保持尽量小的改动,只能保持原来设计思路,导致组件或系统越来越庞大以及难以维护。如果进行拆分,重新设计,需要付出更大代价。

不必要的复杂性:设计中包含不具有任何好处的基础结构。

不必要的重复性:设计中未对可以重复使用的功能结构进行抽象。

晦涩性:很难进行理解。

 

OOD原则:开闭原则

电话拨号案例分析:

方式1:对Button简单抽象





方式2:策略模式





方式3:适配器模式





方式4:观察者模式:解决button有新的操作功能时





OOD原则:依赖倒置原则

DIP:1.高层模块不能依赖低层模块,需要高层定义一个接口提供给低层模块依赖;2.抽象不能依赖实现,而是实现依赖抽象。

依赖倒置,好莱坞规则是框架设计的核心。例如spring框架,它不依赖于业务代码,框架依赖于接口,我们根据业务逻辑实现接口。高层模块不依赖于低层模块,spring不依赖于业务代码,却可以调用代码。

 

OOD原则:里是替换原则

LSP:是解决继承问题,抽象的威力在于多态和继承

LSP描述:若对每个类型T1的对象O1替换为类型T2的对象O2后,对于O2的程序功能行为不变,则认为T1是T2的子类型。父类可以用子类替换。

Java语法角度看,1.子类一定拥有基类整个接口。2.子类访问控制不能比基类更严格。

 

如何解决无法进行LSP问题:1.提取共性到基类;2.继承改成组合;

继承的优缺点,以及优先使用组合。

 



上图中父类Car完成可以用子类bmwCar和benzCar替换,符合里是替换原则。



OOD原则:单一职责原则

违反SRP后果:1.脆弱性;2.不可移植

OOD原则:接口分离原则

ISP不应该强制程序依赖不需要的方法。

ISP和SRP是相关的。

ISP:指出如何设计接口;从客户角度出发,不要让客户看到他们不需要的方法。

SRP:指出如何设计类;只有一种原因促使类发生改变。

ISP方式:1.适配器;2.多继承;



发布于: 2020 年 09 月 27 日 阅读数: 15
用户头像

Mars

关注

还未添加个人签名 2018.06.12 加入

还未添加个人简介

评论

发布
暂无评论
框架设计总结