文档章节

重构系统的套路-面向对象设计原则

春哥大魔王的博客
 春哥大魔王的博客
发布于 2018/12/16 17:11
字数 611
阅读 26
收藏 0

前言

一讨论系统重构,很多人不明所以的就开始画各种架构图,写各种高可用,高并发设计方案,其实不知道很多系统的腐朽是从代码失控开始的,所以重构系统之前,架构师需要深谙面向对象设计之道。

KISS原则

意思是保持设计的简单。

当然简单这个词也是因人而异的,不同知识储备,不同能力的人,对于简单的理解也很不一样,这也是为什么有的是优秀的设计,有的时候是糟糕的设计了。

好的系统重构需要对于整个业务的生命周期,进行了解和梳理,进行合理的树状拆解。需要对业务对系统进行拆分。

只有拆的足够清晰易于理解,才能更好的组装系统。

SOLID原则

意思是单一职能。

这是很多项目失控的源头,很多人很难把控这个单一的度,过细过粗都会引起未来系统的腐化。

微内核的解释是,在一个游戏场景一个Game类有两个职责,一个负责跟踪当前帧,一个负责计算分数,最后两个职责分别给到两个不同的类。

就是说每个职责的一个变化不会引起两个类的正面交锋,拆开之后应该互不影响。

开放封闭原则

在我们接触面向对象的时候,听到最多的是抽象,继承,多态。

随着现代软件的发展,大家越来越意识到抽象,继承的坏处,越来越多的人采取类组合方式来协作,抽象类可以是组合的一种特殊情况。 同抽象一样,合理的开放封闭原则也要重新看待。

开放封闭意味着大量的抽象类,大量的继承,意味着内聚的丧失,意味着付出耦合的代价。

© 著作权归作者所有

春哥大魔王的博客
粉丝 40
博文 306
码字总数 281324
作品 0
海淀
程序员
私信 提问
写了这么多年代码,你真的了解设计模式么?

昨天和同事聊到最近他要做的一个培训,大概的课程是这样的: 第一天: 上午:面向对象原则(OO+SOLID ) 下午:设计模式(Design Pattern) 第二天: 上午:简单设计(SimpleDesign) 下午:重...

ThoughtWorks中国
2018/09/19
0
0
重构:改善饿了么交易系统的设计思路

我在2017年5月加入饿了么的交易部门,先后负责搜索、订单、超时、赔付、条约、交付、金额计算以及评价等系统,后期开始做些整体系统升级的工作。 这篇文章成型于交易系统重构一期之后,主要是...

中间件小哥
今天
0
0
WEB架构师成长之路

一 、你必须学习面向对象的基础知识,如果连这个都忘了,那你的编程之路注定是在做原始初级的重复! 很多程序员都知道类、方法、抽象类、接口等概念,但是为什么要面向对象,好处在哪里,要解...

jerry__sun
2016/07/14
240
0
初探设计模式6:面向对象7大设计原则及实例

开闭原则(Open-Closed Principle,OCP) 开闭原则是这七大设计原则中最常见、最基本的 开闭原则定义:软件实体对扩展是开放的,但对修改是关闭的。意思就是说在不修改软件实体的基础上去扩展其...

你的猫大哥
2018/07/19
0
0
开放关闭原则

1.开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。其他的设计原则,很...

金馆长1
2015/12/13
21
0

没有更多内容

加载失败,请刷新页面

加载更多

一套基于SpringBoot+Vue+Shiro 前后端分离 开发的代码生成器

一、前言 最近花了一个月时间完成了一套基于Spring Boot+Vue+Shiro前后端分离的代码生成器,目前项目代码已基本完成 止步传统CRUD,进阶代码优化: 该项目可根据数据库字段动态生成 controll...

郑清
26分钟前
2
0
javascript-十六进制随机颜色

<script> // 编写一个函数,获得一个十六进制的随机颜色的字符串(如#20CD4F) // function randomColor(){ // var r = random(0,255).toString(16); // var g = random(0,255).toString(16......

ACKo
28分钟前
2
0
springBoot +mybatis 出现sql 语句在数据库可以查询到,但是赋值到实体类上就没有的情况?

1.不要老是反复查看自己是否写错了,为啥有的能出来有的出不来? 可以查看配置文件中是否配置全: 如果在application.yml 文件中是如下配置: mybatis: mapper-locations: classpath:mapp...

kuchawyz
41分钟前
2
0
正则表达式

一、RegExp对象 进行验证和查找的API 1、创建对象: (1)用/创建(直接量):var reg=/正则/ig,表达式固定不变时使用 (2)用new创建:var reg=new RegExp(‘正则’,‘ig’),表达式需要...

wytao1995
41分钟前
2
0
实战限流(guava的RateLimiter)

关于限流 常用的限流算法有漏桶算法和令牌桶算法,guava的RateLimiter使用的是令牌桶算法,也就是以固定的频率向桶中放入令牌,例如一秒钟10枚令牌,实际业务在每次响应请求之前都从桶中获取...

程序员欣宸
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部