【js设计模式】SOLID五大设计原则


Posted in Javascript onMarch 24, 2022

【js设计模式】SOLID五大设计原则

【js设计模式】SOLID五大设计原则

一、用Promise来说明单一职责原则、开放封闭原则。
function loadImg(src){
var promise = new Promise(function(resolve,reject){
var img = document.createElement('img')
img.onload = function(){
resolve(img)
}
img.onerror = function(){
reject('图片加载失败')
}
img.src = src
})
return promise
}
var src = "https://avatar.csdn.net/5/A/C/3_ttian6.jpg";
var result = loadImg(src)
result.then(function(img){
console.log(img.width)
return img
}).then(function(img){
console.log(img.height)
}).catch(function(ex){
// 统一捕获异常
console.log(ex)
})
  1. // 1、单一原则:每个then只做一件事.
    // 2、开放封闭原则:如果有新的需求继续写then即可。
    二、Unix哲学
    以下内容摘自《Linux/Unix设计思想》第一章Unix哲学:集思广益的智慧。

    Unix哲学的几条准则看似简单。事实上,它们简单到会容易使人们忽略其重要性。这就是它们颇具欺骗性的地方。其实,简单的外表下掩盖着一个事实:如果人们能够始终如一的贯彻它们,这些准则可是非常行之有效的。

    以下这份清单会让你对Unix哲学的准则有初步的认识。

    (1)小即是美。相对于同类庞然大物,小巧的事物有着其无可比拟的巨大优势。其中一点就是它们能够以独特有效的方式结合其他小事务,而且这种方式往往是最初的设计者没能预见的。

    (2)让每一个程序只做好一件事情。通过集中精力应对单一任务,程序可以减少冗余代码,从而避免过高的开销、不必要的复杂性和缺乏灵活性。

    (3)尽快建立原型。大多数人认同“建立原型是任何项目的一个重要组成部分。在其他方法论中,建立原型只是设计中一个不太重要的组成部分,然而,在Unix环境下它却是达成完美设计的主要工具。

    (4)舍高效率而取可移植性。当Unix作为第一个可移植系统而开创先河时,它曾经掀起过轩然大波。今天,可移植性早被视作现代软件设计中一个理所当然的特性,这更加充分说明这条Unix准则早就在Unix之外的系统中获得了广泛认可。

    (5)使用纯文本文件来存储数据。舍高效率而取可移植性强调了可移植代码的重要性。其实可移植性数据的重要性绝不亚于可移植代码。在关于可移植性的准则中,人们往往容易忽视可移植性数据。

    (6)充分利用软件的杠杆效应。很多程序员对可重用代码模块的重要性只有一些肤浅认识。代码重用能帮助人们充分利用软件的杠杆效应。一些Unix的开发人员正是遵循这个强大的理念,在相对较短的时间内编写出了大量应用程序。

    (7)使用shell脚本来提高杠杆效应和可移植性。shell脚本在软件设计中可谓是一把双刃剑,它可以加强软件的可重用性和可移植性。无论什么时候,只要有可能,编写shell脚本来替代C语言程序都不失为一个良好的选择。

    (8)避免强制性的用户界面。Unix开发人员非常了解,有一些命令用户界面为什么会被称为是“强制性的"用户界面。这些命令在运行的时候会阻止用户去运行其他命令,这样用户就会成为这些系统的囚徒。在图形用户界面中,这样的界面被称为”模态“。

    (9)让每一个程序都成为过滤器。所有软件程序共有的最基本特性就是,它们只是修改而从不创造数据。因此,基于软件的过滤器本质,人们就应该把它们编写成执行过滤器任务的程序。

    以上列出Unix开发人员所奉行的信条。这些都是大家公认的Unix基本理念。如果你也采用这些标准,那么人们就会认为你是一个”Unix人er“。

    下面还列出了10条次要准则,这些准则正在渐渐发展成Unix世界信奉体系的一个组成部分。并非每个与Unix打交道的人都会将它们奉为信条,而且在严格意义上其中一些不能算作是Unix的特性。不过,它们看起来依然是Unix文化(当然地也包括Linux文化)不可或缺的一部分。

    (1)允许用户定制环境。Unix用户喜欢掌控系统环境,并且是整个环境。很多Unix应用程序绝对不会一刀切地使用交互风格,而是将选择的权利交给用户。它的基本思想就是,程序应该只是提供解决问题的机制,而不是为解决问题的方法限定标准。让用户探索属于自己的通往计算机的家境之路吧。

    (2)尽量使操作系统内核小而轻巧。尽管对新功能的追求永无止境,Unix开发人员还是喜欢让操作系统最核心部分保持最小的规模。当然,他们并不总是能做到这一点,但这是他们的目标。

    (3)使用小写字母,并尽量保持简短。使用小写字母是Unix环境中的传统,尽管这么做的理由已不复存在,但人们还是保留了这个传统。今天,许多Unix用户之所以要使用小写的命令和神秘的名字,不再是因为有其限制条件,而是他们就喜欢这么做。

    (4)保护树木。Unix用户普遍不太赞成使用纸质文档。而是在线存储所有文字档案。此外,使用功能强大的在线工具来处理文件是非常环保的做法。

    (5)沉默是金。在需要提供出错信息的时候,Unix命令是出了名的喜欢保持沉默。虽然很多经验丰富的Unix用户认为这是可取得做法,可其他操作系统的用户却并不赞同这种观点。

    (6)并行思考。大多数任务都能分解成更小的子任务。这些子任务可以并行运行,因而,在完成一项大任务的时间内,可以完成更多子任务。今天已涌现出大量对称处理(symmetric multiprocessing,SMP)设计,这说明计算机行业正朝着并行处理的方向发展。

    (7)各部分之和大于整体。小程序集合而成的大型应用程序比单个的大程序更灵活,也更为实用,本条准则正式源于此想法。两种解决方案可能具备同样的功能,可集合小程序的做法更具有前瞻性。

    (8)寻找90%的解决方案。百分百的完成任何事情都是很困难的。完成90%的目标会更有效率,并且更节省成本。Unix开发人员总是在寻找能够满足目标用户90%要求的解决方案,剩下的10%则任其自生自灭。

    (9)更坏就是更好。Unix爱好者认为具有”最小公分母“的系统是最容易存活的系统。比起高品质而昂贵的系统,那些便宜但有效的系统更容易得到普及。于是,PC兼容机的世界从Unix世界借鉴了此想法,并取得了巨大成功。这其中的关键字就是包容。如果某一事物的包容性强到足以涵盖几乎所有事物,那它就比那些”独家”系统要好得多。

    (10)层次化思考。Unix用户和开发人员都喜欢层次来组织事物。例如,Unix目录结构是最早将树结构应用于文件系统的架构之一。Unix的层次化思考已扩展到其他领域,如网络服务命名器、窗口管理、面向对象开发。

    作者Mike Gancarz是美国佐治亚州亚特兰大市的一名编程及应用顾问。他的团队使用Linux、Unix和Java工具,为金融服务行业开发出多个获奖的解决方案。作为Unix应用程序设计专家,他不遗余力的推广Unix已达二十多年。作为开发出X Window System的团队成员,Mike Gancarz还始创了一些至今仍应用在Linux的最新窗口管理器中的可用性观念。

    作为刚刚从windows转移到linux系统学习的人来说,linux显得那么的不近人情。就像书中所描述的那样,甚至于在Windows中只需要点一下鼠标就可以完成的任务在Linux中却要通过键入命令来实现,感觉它是那么的不方便!但是时间久了就会慢慢感觉到linux所蕴涵的智慧和解决问题的效率。正如我们所知道的那样,在Linux中你是自由的,你不必一味的去迎合系统,因为你就是掌舵者,系统中的一切都听从你的安排,只要你愿意。我喜欢Linux的个性,无论世界多么的飞扬浮躁,它始终如一的坚持着自己的信念。“小即是美”、“只做好一件事情”、“各部分之和大于整体”……等等的这些“Unix人”所奉行的理念有着更深层次的含义,其不仅可以指导我们如何在Linux中生存,更可以用来当作我们人生的指导思想,指引我们寻找属于我们自己的人生意义。

Javascript 相关文章推荐
不错的一个日期输入 动态
Nov 06 Javascript
js 弹出框 替代浏览器的弹出框
Oct 29 Javascript
30个精美的jQuery幻灯片效果插件和教程
Aug 23 Javascript
jquery中dom操作和事件的实例学习-表单验证
Nov 30 Javascript
简化版手机端照片预览组件
Apr 13 Javascript
jQuery跨域问题解决方案
Aug 03 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
Dec 20 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
Apr 12 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
Nov 23 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
Mar 08 Javascript
浅谈vue中数据双向绑定的实现原理
Sep 14 Javascript
vue中的scope使用详解
Oct 29 Javascript
什么是SOLID
Vue3中toRef与toRefs的区别
Mar 24 #Vue.js
Javascript的promise,async和await的区别详解
Mar 24 #Javascript
一起来看看Vue的核心原理剖析
Mar 24 #Vue.js
手写Spirit防抖函数underscore和节流函数lodash
Mar 22 #Javascript
深入讲解Vue中父子组件通信与事件触发
Mar 22 #Vue.js
关于Vue中的options选项
Mar 22 #Vue.js
You might like
关于PHP模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
2016/07/12 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
Python爬虫爬验证码实现功能详解
2016/04/14 Python
python分析作业提交情况
2017/11/22 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
Python random模块制作简易的四位数验证码
2020/02/01 Python
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
Html5定位终极解决方案
2020/02/05 HTML / CSS
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
EM Cosmetics官网:由彩妆大神Michelle Phan创办的独立品牌
2020/04/27 全球购物
给排水专业应届生求职信
2013/10/12 职场文书
财务部经理岗位职责
2014/02/03 职场文书
工作会议方案
2014/05/21 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
撤诉状格式范本
2015/05/19 职场文书
关于观后感的作文
2015/06/18 职场文书
python数字转对应中文的方法总结
2021/08/02 Python
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript