深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP

来源:未知 责任编辑:责任编辑 发表时间:2014-01-26 21:59 点击:

前言
Bob大叔提出并发扬了S.O.L.I.D五大原则,用来更好地进行面向对象编程,五大原则分别是:
1. The Single Responsibility Principle(单一职责SRP)
2. The Open/Closed Principle(开闭原则OCP)
3. The Liskov Substitution Principle(里氏替换原则LSP)
4. The Interface Segregation Principle(接口分离原则ISP)
5. The Dependency Inversion Principle(依赖反转原则DIP)
五大原则,我相信在博客园已经被讨论烂了,尤其是C#的实现,但是相对于JavaScript这种以原型为base的动态类型语言来说还为数不多,该系列将分5篇文章以JavaScript编程语言为基础来展示五大原则的应用。 OK,开始我们的第一篇:单一职责。
英文原文:http://freshbrewedcode.com/derekgreer/2011/12/08/solid-javascript-single-responsibility-principle/
单一职责
单一职责的描述如下:
A class should have only one reason to change
类发生更改的原因应该只有一个
复制代码
一个类(JavaScript下应该是一个对象)应该有一组紧密相关的行为的意思是什么?遵守单一职责的好处是可以让我们很容易地来维护这个对象,当一个对象封装了很多职责的话,一旦一个职责需要修改,势必会影响该对象想的其它职责代码。通过解耦可以让每个职责工更加有弹性地变化。
不过,我们如何知道一个对象的多个行为构造多个职责还是单个职责?我们可以通过参考Object Design: Roles, Responsibilies, and Collaborationshttp://www.amazon.com/Object-Design-Roles-Responsibilities-Collaborations/dp/0201379430一书提出的Role Stereotypes概念来决定,该书提出了如下Role Stereotypes来区分职责:
1. Information holder – 该对象设计为存储对象并提供对象信息给其它对象。
2. Structurer – 该对象设计为维护对象和信息之间的关系
3. Service provider – 该对象设计为处理工作并提供服务给其它对象
4. Controller – 该对象设计为控制决策一系列负责的任务处理
5. Coordinator – 该对象不做任何决策处理工作,只是delegate工作到其它对象上
6. Interfacer – 该对象设计为在系统的各个部分转化信息(或请求)
一旦你知道了这些概念,那就狠容易知道你的代码到底是多职责还是单一职责了。
实例代码
该实例代码演示的是将商品添加到购物车,代码非常糟糕,代码如下:
function Product(id, description) {
    this.getId = function () {
        return id;
    };
    this.getDescription = function () {
        return description;
    };
}

function Cart(eventAggregator) {
    var items = [];

    this.addItem = function (item) {
        items.push(item);
    };
}

(function () {
    var products = [new Product(1, "Star Wars Lego Ship"),
            new Product(2, "Barbie Doll"),
            new Product(3, "Remote Control Airplane")],
cart = new Cart();

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Gb2312转utf-8编码的方法(vbs+js)
  • 如何使用Ajax技术开发Web应用程序(1)
  • js跳转路径问题
  • JavaScript模仿桌面窗口
  • 用js检测两个线段是否相交
  • 运用JavaScript构建你的第一个Metro式应用程序(on Windows
  • 我知道的JavaScript -- 设计模式(桥接)应用之 – 验证器
  • 我是如何去了解jquery的(六),案例之幻灯片轮换
  • Jquery封装幻灯片效果
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1