Design Principles and Design Patterns

设计原则解读。

设计原则是对设计模式的约束性要求,属于设计中基本的四项特征,不符合此四项特征的设计,不具有生命力。

设计模式也是在此四项设计原则上的具体化实例化衍生物。

Martin原文:

http://www.cvc.uab.es/shared/teach/a21291/temes/object_oriented_design/materials_adicionals/principles_and_patterns.pdf

Architecture and Dependencies

软件最开始的的设计,一般都是完美的,但是往往在软件后续的开发维护过程中,一点点的恶化掉,导致软件软件无法维护。

软件开发维护过程中,对软件的修改又是必不可少的,因为需求的变化是必可避免的,又是变化多样的, 对设计框架的冲击也最大。

后期维护者,由于项目需求的紧急程度,可能在不理解的原始设计的背景下,添加新的需求实现,违背了原始设计,则设计被破坏,后续维护者更加迷惘。

Symptoms of Rotting Design -- 设计恶化的特征

Rigidity - 修改困难

新的需求,不好在现有实现上添加代码实现。

Fragility - 脆弱性

新的修改, 牵扯到多个模块,且容易引入bug,导致一连串的修改,又继续扩散, 产品不再信任。

Immobility - 不可移植性

一个大项目,包括若干子功能, 功能见有复用的地方, 但是开发者却无法复用,因为依赖不清晰,拆分功能对原有功能产生影响。

Viscosity - 粘性

设计的粘性 和 环境的粘性

当保持设计的成本比较大, 则设计具有粘性,开发者往往会选择hack的方法,这种方法更加具有破坏性,设计的不好呗。

开发者开发的功能依赖开发环境,难于移植的生产环境,则产生环境的粘性。

Changing Requirements -- 变化的需求

不说了, 产品经理被打了,就说名需求的变化到底有多么剧烈。

Dependency Management -- 依赖管理

不恰当的模块依赖,加重的系统间的耦合, 导致源码更加难于管理。

合理的依赖防火墙,可以防止系统的设计的恶化。

Principles of Object Oriented Class Design

The Open Closed Principle (OCP) -- 开闭法则

A module should be open for extension but closed for modification.

Dynamic Polymorphism -- 动态多态

定义抽象的接口,具体的类实现此方法。 高层的逻辑操作逻辑对接口对象进行编程,不对具体类编程。

Static Polymorphism -- 静态多态

编译阶段使用的模板,在编译完成后,静态绑定待操作对象。

Architectural Goals of the OCP

开闭法则,要求设计者具有深刻的洞察力, 分辨出系统中那些部分是变化的,那些部分是不变的, 并将变化的内容,设置出扩展的机制。 例如虚拟接口,虚拟类,允许使用者实现或者替换接口,通过接口添加新的功能, 当然此功能早已经在设计之内,非设计之外的功能不能此类接口的职责之内,如果有则表明,现有设计并不全面。

The Liskov Substitution Principle (LSP)

Subclasses should be substitutable for their base classes

子类可以随时被父类替换。

对于父亲类暴露出去的接口,其实现的功能,  子类应该无条件完全实现, 不多也不能少。

Design by Contract -- 基于契约的设计

理解为面向接口的设计,接口就是使用方 和 实现方的公约,不容变化。

The Dependency Inversion Principle (DIP)

Depend upon Abstractions. Do not depend upon concretions.

一般实现,高层依赖中层,中层依赖底层:

每一层的直接依赖,不应该直接产生,应该给予抽象产生,即高层的底层都不应直接产生依赖,

已该生成出一个抽象层,类似接口契约, 高层依赖抽象层的接口,

底层实现抽象层的接口。

The Interface Segregation Principle (ISP)

Many client specific interfaces are better than one general purpose interface

对于接口的设计,不要整一个大而全的接口, 因为每个接口都具有不同组织的属性, 更加细分接口更加有利于管理接口, 并实现接口。

统一实现一个接口,则任何接口的变动,都将引起所有使用接口客户端的变动。

生动解释见:

https://www.jianshu.com/p/184a90eb3349

原文地址:https://www.cnblogs.com/lightsong/p/9499186.html

时间: 2024-08-03 05:35:08

Design Principles and Design Patterns的相关文章

Design Principles from Design Patterns

Leading-Edge Java A Conversation with Erich Gamma, Part III by Bill Venners June 6, 2005 Erich Gamma lept onto the software world stage in 1995 as co-author of the best-selling book Design Patterns: Elements of Reusable Object-Oriented Software (Addi

vertical roller Mill design principles and wearing parts repair

Basic Introduction Short vertical mill vertical roller mill , a cement raw materials, cement clinker, slag and cinder grinding process used, has a simple structure, low cost of manufacture and use characteristics. Between the body including, disc dri

Android Wear - Design Principles for Android Wear(设计原则)

原文地址:http://developer.android.com/design/wear/principles.html 本篇设计原则提供了一些关于应该怎样规划和评估你的Android Wear应用程序设计的简单思路. Focus on not stopping the user and all else will follow(专注于不打算用户并让一切后续跟随上来) 手表是非常完美的设备造型,让你能够在做其它事情的时候同时使用,例如做饭.吃东西.散步.跑步,甚至是在谈话的过程中.如果你的应用

DataUml Design 教程6-DataUML Design 1.1版本正式发布(支持PD数据模型)

从DataUML Design正式发布到现在有两个月了,由于最近比较忙,到现在才发布1.1版本.以后本人会一直坚持不断完善DataUML Design软件,希望广大程序猿们多多支持. 一.1.1版本新增和改进内容如下 1.支持数据模型元数据导出Word.Excel.PDF文档功能; 2.支持MY SQL.Access数据库; 3.支持加载PowerDesigner数据模型文件; 4.增加数据模型下添加数据包功能; 5.改进新建数据模型时绑定数据库类型功能; 二.生成文档功能 1.打开模型文件如下

U-Boot Design Principles

1.  Keep it Small2.  Keep it Fast3.  Keep it Simple4.  Keep it Portable5.  Keep it Configurable6.  Keep it Debuggable7.  Keep it Usable8.  Keep it Maintainable9.  Keep it Beautiful10. Keep it Open

UI design principles

Master's conclusion: 1. fix a color pattern 2. fix the frames the UI will use 3. fix the subject that you want to present 4. fix the content that you want to show5. properly layout it! caution: color types should be less, and use the contrast concept

Android Material Design-Creating Apps with Material Design(用 Material Design设计App)-(零)

转载请注明出处:http://blog.csdn.net/bbld_/article/details/40400031 翻译自:http://developer.android.com/training/material/index.html 前言 这篇文章是官方material design文档翻译的第一篇.关于material design须要了解的知识能够參阅这本中文版的译文电子书. Material design是一种跨平台的为了视觉.动作.交互设计的综合指南.要在你的Android应用

355. Design Twitter [classic design]

Design a simplified version of Twitter where users can post tweets, follow/unfollow another user and is able to see the 10 most recent tweets in the user's news feed. Your design should support the following methods: postTweet(userId, tweetId): Compo

响应式和自适应(Responsive design 和 Adaptive design)

前二天做了几个手机端页面,本来用CSS3的@media 但因为对它还不是很了解,调试多次不成功.因为时间比较赶,为了实现最终的页面效果,我用JS去获取了屏幕的大小去控制了最终的字体大小. 做完后闲下来我查了一下资料,更加深入的去了解了一下何为响应式.发现原来我最终的页面,只能叫自适应,而不叫响应式.对于页面来说 没有实际上显示的问题(经过查资料显示貌似自适应比响应式更完善)不过我的初衷还是做响应式,在做响应式遇到问题时临时做的自适应. 响应式的基本概念是: 简而言之,就是一个网站能够兼容多个终端