开放封闭原则,核心思想:软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
体现在两个方面:
1、对扩展开放,意味着有新的需求和变化时,可以对现有代码进行扩展,以适应新的情况。
2、对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
==
辛辛苦苦写好的代码,测试也通过了,就不要再改了嘛,一改动就可能发生错误,或者是不希望的修改,至少还需要在测试一遍吧。如果改一处会引发好多的错误的话,那就更不要改了。不对,好像后面就错了。如果是牵一发而动全身的话,那么还是早点重构一下的好,当然是在允许的情况下。
那么对于写好了的代码要增加功能怎么办呢?扩展呀,再加一个新的类去实现新的功能,而不要改动原有的代码。不过说起来容易做起来难,到底要怎么实现呢?举分页控件的例子吧,一开始分页方式是采用PostBack,但是在网页里面使用的时候,发现对于SEO是不友好的,用户体验也不好,后退的时候容易发生错误。那么怎么办呢?加一个URL分页的方式吧。
打开分页控件的源代码一看,自己都晕了,基本上是看不懂了。怎么办呢?单独写一个吧。以前确实是这么处理两种分页方式的。
新的分页控件(重构以后的)就可以把这两种分页方式无缝的合在一起了,一是对控件的自定义事件和两种分页方式的区分有了新的认识;再者学习了一下OO的基本知识,继承、多态,还有策略模式;最后呢就是有了两个分页控件,用了一段时间,积累了不少的经验,对于各种分页需求也比较了解。中和了这些有利条件,才能够比较合理的把两种分页方式合并在一个控件里面,而不会有硬拼凑在一起的感觉。
我觉得要遵守好这个原则,一是要对OO的基础知识比较了解,一是要有一定的经验,可以预见一些没有提出来的需求。否则的话好像挺难。
电脑硬件是我们学习的好榜样。256M内存,太小了,不够用了,怎么办?扩充一下。买一条1G的内存,插到主板上就可以了。并不需要我们把内存颗粒自己焊接到内存条上。
等等,什么您说你的内存是DDR一代的,现在相同容量的内存条,一代的要比二代的贵上一倍,现在买一代的虽然能扩充内存,但是太不合适了,价格高不说,过不了多久,DDR1就彻底淘汰了,这个生命期太短了,不合适呀。买DDR2有不能插到现在的主板上。
这个就是一个反面教材,为什么会这样呢?接口变了。各个生产厂商都依赖DDR1的协议做主板和内存,然后没多久(几年的时间)DDR2就出来了,但是接口变了,DDR1的内存不能在支持DDR2的主板上使用。原来的DDR1内存也是无法改变接口的。这就造成了DDR1的内存还没有结束生命,就被淘汰了。
所以,定义了一个接口,抽象了一个东东,一定要想好,以后修改接口基本是不可想想的。
============ 欢迎各位老板打赏~ ===========
与本文相关的文章
- · The instance of entity type ‘Customer’ cannot be tracked because another instance with the same key value for {‘Id’} is already being tracked.
- · .NET8实时更新nginx ip地址归属地
- · 解决.NET Blazor子组件不刷新问题
- · .NET8如何在普通类库中引用 Microsoft.AspNetCore
- · .NET8 Mysql SSL error
- · ASP.NET Core MVC的Razor视图渲染中文乱码的问题
- · .NETCORE 依赖注入服务生命周期
- · asp.net zero改mysql
- · .NET5面试汇总
- · .Net连接Mysql数据库的Convert Zero Datetime日期问题
- · vue使用element-ui中的Message 、MessageBox 、Notification
- · Asp.Net Core Filter 深入浅出的那些事-AOP