《你必须知道的.net》读书笔记 007——2.3 开放封闭原则

开放封闭原则,核心思想:软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。

     体现在两个方面:      1、对扩展开放,意味着有新的需求和变化时,可以对现有代码进行扩展,以适应新的情况。      2、对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

==

     辛辛苦苦写好的代码,测试也通过了,就不要再改了嘛,一改动就可能发生错误,或者是不希望的修改,至少还需要在测试一遍吧。如果改一处会引发好多的错误的话,那就更不要改了。不对,好像后面就错了。如果是牵一发而动全身的话,那么还是早点重构一下的好,当然是在允许的情况下。

     那么对于写好了的代码要增加功能怎么办呢?扩展呀,再加一个新的类去实现新的功能,而不要改动原有的代码。不过说起来容易做起来难,到底要怎么实现呢?举分页控件的例子吧,一开始分页方式是采用PostBack,但是在网页里面使用的时候,发现对于SEO是不友好的,用户体验也不好,后退的时候容易发生错误。那么怎么办呢?加一个URL分页的方式吧。

打开分页控件的源代码一看,自己都晕了,基本上是看不懂了。怎么办呢?单独写一个吧。以前确实是这么处理两种分页方式的。

     新的分页控件(重构以后的)就可以把这两种分页方式无缝的合在一起了,一是对控件的自定义事件和两种分页方式的区分有了新的认识;再者学习了一下OO的基本知识,继承、多态,还有策略模式;最后呢就是有了两个分页控件,用了一段时间,积累了不少的经验,对于各种分页需求也比较了解。中和了这些有利条件,才能够比较合理的把两种分页方式合并在一个控件里面,而不会有硬拼凑在一起的感觉。

     我觉得要遵守好这个原则,一是要对OO的基础知识比较了解,一是要有一定的经验,可以预见一些没有提出来的需求。否则的话好像挺难。

     电脑硬件是我们学习的好榜样。256M内存,太小了,不够用了,怎么办?扩充一下。买一条1G的内存,插到主板上就可以了。并不需要我们把内存颗粒自己焊接到内存条上。

     等等,什么您说你的内存是DDR一代的,现在相同容量的内存条,一代的要比二代的贵上一倍,现在买一代的虽然能扩充内存,但是太不合适了,价格高不说,过不了多久,DDR1就彻底淘汰了,这个生命期太短了,不合适呀。买DDR2有不能插到现在的主板上。

     这个就是一个反面教材,为什么会这样呢?接口变了。各个生产厂商都依赖DDR1的协议做主板和内存,然后没多久(几年的时间)DDR2就出来了,但是接口变了,DDR1的内存不能在支持DDR2的主板上使用。原来的DDR1内存也是无法改变接口的。这就造成了DDR1的内存还没有结束生命,就被淘汰了。

     所以,定义了一个接口,抽象了一个东东,一定要想好,以后修改接口基本是不可想想的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

大规模数据集成: Linked Data

在本系列的前两篇文章(“ 使用 RDF 创建数据网络 ” 和 “ 使用 SPARQL 查询 RDF 数据 ”)中,您了解了资源描述框架和 SPARQL 协议和 ...

2338
来自专栏个人分享

海量数据处理技术学习

  外排序:因为海量数据无法全部装入内存,所以数据的大部分存入磁盘中,小部分在排序需要时存入内存。

992
来自专栏Java与Android技术栈

从deep link到信息流广告,魔窗sdk的演变

从最初的移动端运营活动到深度链接(deep link),再到现在的移动端原生广告,魔窗sdk经历了多个版本的迭代之后,功能逐步完善,开始步入4.x版本的时代。

1931
来自专栏闰土大叔

为什么我不推荐你使用vue-cli创建脚手架?

最近在知乎看到一个问题,原问题如下: “ 很奇怪,为什么现在能找到自己手动创建vue脚手架的文章非常少,而且大家似乎对webpack4的热情并不高,对于想基于v...

56913
来自专栏PPV课数据科学社区

如何用Python分析大数据(以Twitter数据挖掘为例)

大数据无处不在。在时下这个年代,不管你喜欢与否,在运营一个成功的商业的过程中都有可能会遇到它。 本教程将会简要介绍何谓大数据,无论你是尝试抓住时机的商人,抑或是...

1.1K4
来自专栏华章科技

推荐 12 款堪称神器的插件,提高工作效率必不可少

导读:工欲善其事,必先利其器,程序员的日常工作根本就离不开Chrome浏览器(还不知道的请面壁思过130s)!其他功能就不啰嗦了,今天来说说 Chrome 如何...

5332
来自专栏前端大白专栏

关于react-native的各种报错的最终解决方案

2519
来自专栏恒思考

像Django学习写程序

Django是一个python的web的快速开发框架,Django也是我接触的第一个web框架。这个框架是一个比较重的框架,有些人对这件事情比较诟病,但是开发起...

2005
来自专栏一“技”之长

iOS10语音识别框架SpeechFramework应用

        iOS10系统是一个较有突破性的系统,其在Message,Notification等方面都开放了很多实用性的开发接口。本篇博客将主要探讨iOS1...

922
来自专栏noteless

5.计算机发展个人理解-电路终究是电路 软件如何控制硬件 代码如何操作硬件 硬件是怎么执行代码 代码如何执行 软件与硬件如何交互 计算机思维 抽象 封装 规范 屏蔽 协议分层

你可能会想到,软件是用高级语言编写的,高级语言被翻译成汇编语言,汇编语言会翻译成机器可以是别的机器语言

1361

扫码关注云+社区

领取腾讯云代金券