文档章节

KISS(Keep It Simple & Stupid)

精通吹水
 精通吹水
发布于 2016/04/11 10:58
字数 1177
阅读 175
收藏 0
点赞 1
评论 0

KISS(Keep It Simple & Stupid)

KISS(Keep It Simple & Stupid):保持精简,并且看起来很“愚蠢”。

在软件开发中,一个系统会变得越来越庞大,系统熵(复杂度)会变得越来越大,导致我们越来越难以hold整个系统(智商问题¯_(ツ)_/¯)。所以我们引入了KISS原则来使**系统熵(复杂度)**保持稳定的数值。

统一命名

一个好的统一命名风格,有利于系统的扩展和维护,推荐驼峰命名法。

使用静态语言

静态语言的合理使用,能最大程度的保证代码重构后的影藏问题,在编译期就可以fix。不过有些场合非常却不是这样子,比如说浏览器,Shell等。静态或者动态语言还是需要综合考量。

微服务架构设计

当系统变的越来越大的时候,我们不能简单的通过将单体架构运行在多个PC上做负载均衡来达到性能上的突破,而应该将整个集群看成一个系统,使用微服务的概念优化整体设计。

高内聚低耦合设计

高内聚

高内聚是指对程序中功能相近的点进行独立化, 如果两个模块之间的修改, 互不影响则说明模块之间是高内聚的。

高内聚意味可维护性,可重写性,因为模块对外部的依赖少(功能的完备性)。模块的内聚和其担当的职责成反比,即模块的职责越多,模块的内聚性越低。

如何划分出一个模块, 这就需要关注点分离。

低耦合

耦合是描述模块之间的依赖程度,如果一个模块的修改,都对另一个模块进行修改,则两模块之间是相互依赖耦合的,这种设计不是理想的设计。

低耦合是我们的设计目的,但是不存在没有耦合的程序。耦合是必须的,因为模块之间必须通信交互,不过可以设计出依赖于不变或者不易变的接口, 而不需要关注模块内的实现, 从而实现低耦合。

关注点分离

实现高内聚低耦合行之有效的方式:关注点分离(SOC),将系统在不同层次[水平/垂直]上进行拆分, 形成功能不同没有重叠的模块。

每个功能只关注一个方面(Aspect)保证模块之间功能没有或者尽量少的重复。

模块化内部实现细节隐藏,只暴露必须的接口,使得模块之间依赖于抽象,达到稳定。

分离关注点的思想存在于我们软件设计的各个领域。例如:

  • 面向接口编程: 具体实现类的替换不影响上层业务逻辑
  • 面向AOP编程: 把性能统计的代码都分离出来, 保证高内聚低耦合
  • TCP/IP:TCP/IP是非常明显的水平切分模型,保证了互联网能运行在不同的介质上。IP层对应IP层,TCP层对应TCP层,使得逻辑上非常的清晰。通过这种分层模型,在不修改TCP上层(如HTTP)和下层(如IP)的情况下,非常轻松简洁地实现了NET转换之类的TCP层小技巧
  • 前后端分离:在Web+App编程中,前后端分层是非常明显的垂直切分,两者仅仅通过RESTful API+JSON 交互,利于测试和扩张

通过对程序的关注点分离, 使得程序各个模块之间变得高内聚低耦合.

综合约束

在软件开发设计中, 高内聚低耦合原则的实现是还依赖于综合约束,且贯穿整个软件生命周期, 并且软件开发过程中切忌过度设计

综合约束:业务逻辑, 软件条件, 硬件条件, 性能指标, 语言, 具体编码环境等因素。

面向对象设计

在面向对象的开发过程中,我们有一些软件设计上的原则:

面向对象设计原则

通过这些原则我们可以非常方便的设计出高内聚低耦合的代码结构。

总结

在开发过程中需要遵守KISS原则,使用一些方法/设计来达到降低系统熵,提高系统维护性的目的

参考

© 著作权归作者所有

共有 人打赏支持
精通吹水
粉丝 18
博文 56
码字总数 55035
作品 0
人事招聘
rushmore/zbus-python

/\ /\\\\\ /\ /\ /\ /\\\\\ /\/////\ //\/\ ///////\/ /\\\\ /\ /\ /\////// /\\\\\ //\\ zbus-python-client zbus strives to make Message Queue and Remote Procedure Call fast, light-w......

rushmore ⋅ 2017/07/09 ⋅ 0

rushmore/zbus-cpp

/\ /\\\\\ /\ /\ /\ /\\\\\ /\\\\ /\ /\ ///////\/ /\\\\ /\ /\ /\////// /\////// /\\\\\ /\\\\\ zbus strives to make Message Queue and Remote Procedure Call fast, light-weighted and......

rushmore ⋅ 2017/07/08 ⋅ 0

rushmore/zbus-dotnet

/\ /\\\\\ /\ /\ /\ /\\\\\ /\/\\\ /\\\\ /\\\\\ ///////\/ /\\\\ /\ /\ /\////// /\////\ /\/////\ ////\//// zbus-dotnet zbus strives to make Message Queue and Remote Procedure Call ......

rushmore ⋅ 2017/07/08 ⋅ 0

rushmore/zbus-php

/\ /\ /\\\\\ /\ /\ /\ /\\\\\ /\/////\ /\ /\/////\ ///////\/ /\\\\ /\ /\ /\////// /\\\\\ /\\\\\ /\\\\\ zbus strives to make Message Que...

rushmore ⋅ 2017/07/09 ⋅ 0

和程序员约会的优点和缺点,想清楚再约会

什么?你要和程序员约会去了?!!咋一听到这个消息你会怎么想,是嗤之以鼻还是羡慕嫉妒恨? 下面且听我一一分析与程序员约会的优缺点吧。 优点:他们不会骗人;他们也没有时间去拈花惹草。 ...

oschina ⋅ 2015/01/24 ⋅ 17

程序员的痛点!程序员老婆:不怕,老公是写代码的,忙得很!

点击《阅读原文》跳转到原文链接 入了程序员这个坑,就不要再想有多少空闲时间了。我的一个前端程序员朋友和我诉苦:前端这份工作,太忙了,最近一个星期天天加班,都没时间陪家人。。 谁说不...

我是一个程序猿 ⋅ 2017/12/07 ⋅ 0

rushmore/zbus-javascript

/\ /\\\\\ /\ /\ /\ /\\\\\ /\ /\\\\\ ///////\/ /\\\\ /\ /\ /\////// /\ /\////// zbus strives to make Message Queue and Remote Procedure Call fast, light-weighted and easy to buil......

rushmore ⋅ 2017/07/05 ⋅ 0

可用性配置管理--cdist

cdist 对其他的配置管理系统像 cfengine, bcfg2, chef and puppet 来说是可选的,但是cdist的运行方式不一样,下面是它独特的一些特性: Keywords Description Simplicity There is only on...

匿名 ⋅ 2012/03/13 ⋅ 0

cdist 3.0.5 发布,可用性配置管理

cdist 3.0.5 发布,此版本引入了覆盖的概念,更新了文档。 cdist 对其他的配置管理系统像 cfengine, bcfg2, chef and puppet 来说是可选的,但是cdist的运行方式不一样,下面是它独特的一些特...

oschina ⋅ 2014/02/06 ⋅ 0

cdist 3.1.3 发布,可用性配置管理

cdist 3.1.3 发布,此版本引入了新类型来管理 Yum Repositories,增强了 the hostname 类型来支持 CentOS。 cdist 对其他的配置管理系统像 cfengine, bcfg2, chef and puppet 来说是可选的,...

oschina ⋅ 2014/05/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CENTOS7防火墙命令记录

安装Firewall命令: yum install firewalld firewalld-config Firewall开启常见端口命令: firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-po......

cavion ⋅ 今天 ⋅ 0

【C++】【STL】利用chromo来测量程序运行时间与日志时间打印精确到微秒

直接上代码吧,没啥好说的。头疼。 #include <iostream>#include <string>#include <ctime>#include <sstream>#include <iomanip>#include <thread>#include <chrono>using ......

muqiusangyang ⋅ 今天 ⋅ 0

Mac环境下svn的使用

在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还需做一下简...

故久呵呵 ⋅ 今天 ⋅ 0

破解公司回应苹果“USB限制模式”:已攻破

本周四,苹果发表声明称 iOS 中加入了一项名为“USB 限制模式”的功能,可以防止 iPhone 在连接其他设备的时候被破解,并且强调这一功能并不是针对 FBI 等执法部门,为的是保护用户数据安全。...

六库科技 ⋅ 今天 ⋅ 0

MyBtais整合Spring Boot整合,TypeHandler对枚举类(enum)处理

概要 问题描述 我想用枚举类来表示用户当前状态,枚举类由 code 和 msg 组成,但我只想把 code 保存到数据库,查询处理,能知道用户当前状态,这应该怎么做呢?在 Spring 整合MyBatis 的时候...

Wenyi_Feng ⋅ 今天 ⋅ 0

synchronized与Lock的区别

# <center>王梦龙的读书笔记第一篇</center> ## <center>-synchronized与Lock的区别</centre> ###一、从使用场景来说 + synchronized 是能够注释代码块、类、方法但是它的加锁是和解锁使用一......

我不想加班 ⋅ 今天 ⋅ 0

VConsole的使用

手机端控制台打印输出,方便bug的排查。 首先需要引入vconsole.min.js 文件,然后在文件中创造实例。就能直接使用了。 var vConsole = new VConsole(); vConsole的文件地址...

大美琴 ⋅ 今天 ⋅ 0

Java NIO之字符集

1 字符集和编解码的概念 首先,解释一下什么是字符集。顾名思义,就是字符的集合。它的初衷是把现实世界的符号映射为计算机可以理解的字节。比如我创造一个字符集,叫做sex字符集,就包含两个...

士别三日 ⋅ 今天 ⋅ 0

Spring Bean基础

1、Bean之间引用 <!--如果Bean配置在同一个XML文件中,使用local引用--><ref bean="someBean"/><!--如果Bean配置在不同的XML文件中,使用ref引用--><ref local="someBean"/> 其实两种......

霍淇滨 ⋅ 今天 ⋅ 0

05、基于Consul+Upsync+Nginx实现动态负载均衡

1、Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/local/srcwget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip 解压consu......

北岩 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部