谈一下OOP的乱用现象
很久很久以前写了两篇设计模式乱用的文章,最近心血来潮,突然想写篇OOP乱用。
最近在移植一个旧项目,接手过程很多嘈想吐,开一篇谈一下OOP的乱用。
大多数公司用MVC是为了解耦合,但是这套代码的MVC明显是不解耦的,例如View1可以直接拿view2单例如调用里面的方法。v可以调用c,c可以随意调用v。不同人写的c和v可以随意调用。看起来写得爽,但是修改起来就各种吐了,当你修改一个v的时候,我还得读一下耦合的另一个v的相关代码。这段话说得晕晕的,下面直接说简单的OOP的乱用吧。
继承和复盖,相信写过代码的人都懂,也很简单。但是真正写代码的时候,什么情况下用继承呢?直接说反例得了。例如项目有一个加速的界面,很多模块会用到,但是各模块对这个界面的显示有一些不一样,例如A模块比B模块多一个按钮。很多人的想到的方法是在这个加速界面里面加type处理,不同模块有不同的type,然后再加一个param,处理不同模块的逻辑,想到这个方法的人面壁去吧。这个就是当前我接手的项目的最大问题了。这种做法实际上是乱用工厂模式,简单的说,问题就是去别人的加速模块加type处理自己的逻辑。当新项目想移植加速面板的时候,发现这个加速面板耦合大量模块,移植的时候,我要移A的加速面板,还得考虑B的加速逻辑。所以很多人说改别人的代码还不如自己写一个新的来得快。
既然说出了问题,我们再说说解决方案,相信有经验的人早就想到了。把加速面板做成一个基类,不同模块新建一个自己的面板继承那个基类加速板,处理逻辑如果有少量不同的地方就复盖继承处理就行了。思路很简单,下面看看好处吧,各模块写自己的加速面板时,就是自己写自己的,完全不会跟别人的加速面板有关,也不需要去改别人的模块。移植新项目的时候,移一个模块就看一个模块的代码,移植A模块的加速面板就完全不需要管B怎么写的(除非改动基类加速面板)。这样看谁还敢说自己全新写的快。
旧代码虽然用了mvc,虽然对象都继承了基础的view,基础的model,基础的ctrl,然并卵。M和C都是单例,view虽然不是单例,但是放在单例上面给其它单例调用,代码依然还是像没用oop一样,很过程式的写法。既然不做解耦,那何必花这么多码量写这么多继承做什么。直接搞全局方法不还写得快。
吐嘈完毕,本来还想吐mvc的,发现文字量不少,今天先不吐先,下一篇我要吐乱用注入函数。
谈一下OOP的乱用现象的更多相关文章
- APP内计费规范出台 手游乱收费现象能被遏制?
手游乱收费现象能被遏制?" title="APP内计费规范出台 手游乱收费现象能被遏制?"> 在一个混乱.无秩序的环境中竞争,虽然有可能不择手段地获取更多的利益,但 ...
- struts2多线程数据乱窜问题
转自:http://love398146779.iteye.com/blog/1781680 1.struts2为每个线程提供一个action实例,多线程访问时不会出现问题.当使用spring管理st ...
- 浅谈OPP
了解Java或C#等面向对象编程语言的的程序员比较熟悉类和对象以及OOP. 一谈起OOP,就会想起教科书式的OOP概念:封装.继承.多态.粗浅的解释封装就是对数据进行隐藏:继承就是子类继承父类(cla ...
- Apache Flink:特性、概念、组件栈、架构及原理分析
2016-04-30 22:24:39 Yanjun Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时(Flink Runtim ...
- flink 入门
http://ifeve.com/flink-quick-start/ http://vinoyang.com/2016/05/02/flink-concepts/ http://wuchong.me ...
- 怒转一波,此人整理的Flink特别好
Apache Flink:特性.概念.组件栈.架构及原理分析 Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时(Flink Runtim ...
- Apache Flink:详细入门
Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时(Flink Runtime),提供支持流处理和批处理两种类型应用的功能.现有的开源计算 ...
- 从js向Action传中文参数出现乱码问题的解决方法
Action获取jsp表单中的中文参数,只要整个项目都采用UTF-8编码格式都不会出现乱码问题:但JSP中用到JS,并从JS向Action传中文参数,就会出现中文乱的现象 做项目的时候,发现A ...
- 专题:Channel Bonding/bonding
EtherChannel最初是由cisco提出,通过聚合多条物理链路为单条逻辑链路,从而实现高可用及提高吞吐量等目的.AgP(Port Aggregation Protocol,Cisco专有协议). ...
随机推荐
- Gradle的属性设置大全
Gradle作为一款项目构建工具,由于其强大.灵活.快速.完全兼容Ant等特性,越来越受到人们欢迎.Gradle的灵活有时候也会引起人们的困惑.比如在Gradle中设置变量和属性就有N种办法.由于Gr ...
- Abp Application级别的生命周期
本篇级别: 中高级篇,假设各位知道Abp是什么, Abp里面的基本的概念及用法(想了解基本概念的可在这里学习: http://www.cnblogs.com/mienreal/p/4358806.ht ...
- C#与数据库访问技术总结(七)综合示例
综合示例 说明:前面介绍了那么多,光说不练假把式,还是做个实例吧. 表:首先你要准备一张表,这个自己准备吧.我们以学生表为例. 1.ExecuteScalar方法 ExecuteScalar方法执行返 ...
- Tomcat日志输出在linux和windows差异
tomca日志保存在${catalina}/logs目录下: 主要包括五类文件,开发测试常使用的日志主要保存在catalina.localhost日志中,且每天生成独立日志文件,结尾以日期命名,方便查 ...
- Objective-C 语法之 static 关键字
转:http://www.apkbus.com/android-593-1.html 学习过Java 或者 C 语言的朋友应该很清楚static关键字吧?在某个类中声明一个static 静态变量, 其 ...
- 转:LIRE的使用
LIRE的使用:创建索引 LIRE(Lucene Image REtrieval)提供一种的简单方式来创建基于图像特性的Lucene索引.利用该索引就能够构建一个基于内容的图像检索(content- ...
- go语言实现一个简单的登录注册web小程序
最近学习golang也有一段时间了,基础差不多学了个大概,因为本人是java程序员,所以对web更感兴趣.根据<go web编程>中的例子改编一个更简单的例子,供新手参考,废话不多说,上菜 ...
- WPS 文字排版 标题回车后标题号自动增加
飞思卡来互联网提供全球性的 看了看 风格的呵呵 合格否d合格否的 secure embedded嵌入式解 个国家和地区,注册了成千上万项专利,产品面向 物联网,汽车电子,消费电子,工业及网络设备等市 ...
- old header
海纳百川 山不拒土 No Backspace in Real Life. Love Life![Cloud][LBS][GIS][GPS][MAPS][C++][Java]
- linux中ssh可以登录sftp不能登录解决办法
我的服务器一直正常使用,平时使用secureCRT进行管理,使用secureFX进行文件的上传下载,突然有一天secureFX连接的时候出问题了,secureFX的日志如下: i SecureFX 版 ...