`
guanpanpan
  • 浏览: 15992 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

编码反模式

 
阅读更多

1) 通用方法

一个方法处理多个业务,比如修改用户传入一个用户对象,方法根据邮箱,手机..是否为空来处理修改手机,邮箱等业务

处理方法:每个业务要分开,单一职责

2) 对象内的平行方法

A(a1,a2,a3),a1,a2,a3方法中有相似功能。

IA(a)ßA(a,abstract b)ßA1(b),A2(b),A3(b)

3) 业务链方法

一个业务的链式判断用方法调用来实现,比如用户登录,先判断是否是用户名-》别名-》密码。

方案二:用责任链或装饰器模式来处理。

两个没有特别明显的优略,但如果是一个业务的重要逻辑,方案二有明显优势。

4) 混乱代码

很多类,对像协调来做一件事,每个类只是一个框子,代码间调用复杂。

最差的一种代码,用面向对象的架子来装下面向过程的代码,过程分的还不清晰。

处理方案:两条线索,1从重复代码入手重构(示例迁徙程序)。2.从不合理调用链条重构(示例画图模型和前台UI耦合重构)。

更进一步再是类的单一职责。

5) 混乱对象

对象转化多次来做一件事。比如转成一个批量Bean的临时对象,再生成批量Bean,再生成一个批量Bean的集合。

处理方法:找出有效转化,去除无效转化。

6) 线程滥用

到处是多线程协作。

处理方法:找到系统瓶颈,多线程的使用原因,去除对系统无贡献的多线程。

7) 提前调一下

调用方法A之前必须调用B方法,如画图前,要调用设置屏幕信息以及画布大小相关的方法。

处理方法:把B做成接口让相关类依赖,调用A时传入相关B接口实现。

8) 双向依赖

解除双向依赖,A->B B-A  

方法一:使用依赖倒置原则。(把A中被B依赖的进行抽象放入B中)

方法二:新建立C,把A中被B依赖的放入C

例:画图程序前台依赖于画图模型,画图模型需要依赖前台像素大小。画图模型依赖于ScreenInfo接口,前台类构建ScreenInfo实现传入模型。

此例子中不适用方法二,因为只有画的时候才能得到屏幕信息。

 

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:271.5pt; height:60.75pt'> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

9) 业务关注缓存

业务当中耦合缓存相关代码

处理方法:业务不应该关注数据的存储实际介质,下层提供透明的接口,实现Repository有些理想化。可以在缓存和数据库之上简历一个Façade来透明化接口。

10) 分层清晰,对象多

分层清晰,但业务松散,过程化对象多,但调用关系多过所做事情。

处理方法:提高业务对象的内聚性。

此处很有代表性,这类代码应该算是面向过程中比较好的代码了。很好的体现了领域驱动和过程化驱动的差异。对象更合理。

11) ThreadLocal大量使用

代码不好阅读,ThreadLocal能不用就不用。在一些地方能画龙点睛,比如数据库连接。但别代替方法传值。

12) 重构半天跑不起来了

 

程序混乱,并且无单元测试。重构要小步,先加新功能再删除原来的功能,并且要分成几步(足够小),每步让程序能跑起来可测试。比如用一个传值结构替换原来的传值结构,要先加新的变量,但不要删除原来的变量,然后用新变量一个属性在这个方法中的调用来替换原来的变量引用。 又如,画图程序中新的画图逻辑一个线一个点的替换原有逻辑。先注释原逻辑中的一点代码,让功能消失,用新逻辑实现,再测试。

分享到:
评论

相关推荐

    编码器模式1计数.txt

    用stm32TIM2的CH1和CH2通道作为编码器模式,选择编码器模式1,编码器为A相为512脉冲,dir为方向脉冲,可以实现编码器正转加数,反转减数。

    TM4编码器QEI

    运用ti公司的TM4LanuchPad的编码器能够自主识别正反转

    STM32编码器计数

    用的stm32的定时器编码器模式,包括.c和.h文件。其中包含做项目时遗留的一些功能,添加进去时把未定义的部分直接删掉就可以使用。

    让开发自动化:持续集成反模式,第2部分

    火龙果软件工程技术中心 通过了解反模式简化持续集成本文内容包括:避免瓶颈提交造成的阻塞忽略不是幸福重新安排已经计划好的构建但是,在我的机器上可以正常工作!清理环境结束语参考资料虽然持续集成(CI)在降低...

    MediaCoder标准DVD反交错AVC质量模式配置

    MediaCoder标准DVD反交错Tap5,适用于DVD5,NTSC、PAL AVC质量模式配置55,MKV输出。 CVHQ,自用编码。

    JavaScript模式【英文版】.pdf

    什么是使用JavaScript开发应用程序最好的方法呢?《JavaScript模式》将使用大量JavaScript编码模式和最佳实践来帮您回答该问题。...同时还可以学到一些反模式,一些常见的编程方式,这些编程方式引发的问题比解决的还多

    简单了解JavaScript中常见的反模式

    反模式 是指对反复出现的设计问题的常见的无力而低效的设计模式,俗话说就是重蹈覆辙。 这篇文章描述了 JavaScript 中常见的一些反模式,以及避免它们的办法。 硬编码 硬编码(Hard-Coding)的字符串、数字、日期...

    ASP.NET设计模式-杨明军译(源码)

    3.1.1 反模式:智能UI 3.1.2 分离关注点 3.2 小结 第4章 业务逻辑层:组织 4.1 理解业务组织模式 4.1.1 Transaction Script 4.1.2 Active Record 4.1.3 Domain Model 4.1.4 Anemic Domain Model 4.1.5 ...

    服务设计原理:服务模式和反模式

    作为一系列相关论文的开始,本文提供了设计和实现网络服务的基本原理,并且对面向服务的体系结构(SOA)的相关概念做了一个简要的回顾,以及有关于几种模式和反模式的详细讨论,当构建网络服务时,开发者可以利用它们...

    新一代视频压缩编码标准H.264—很清晰的

    8.10.3 残差变换系数的反量化 258 8.10.4 残差变换系数的逆DCT变换 258 8.10.5 去方块滤波前的图像恢复与重建 258 8.11 SP片中的P宏块和SI片中的SI宏块的解码过程 259 8.11.1 主SP片中P宏块的解码过程 259 8.11.2 辅...

    论文研究-基于祖冲之算法和DNA编码的图像分组加密方法.pdf

    最后利用分组迭代轮数的奇偶性决定明文图像分块模式,并基于DNA符号运算的改进Feistel分组结构实现明文图像分组加密,将加密结果进行DNA编码反变换生成最终密文图像。通过安全性分析,该算法具有很好的抗攻击能力和...

    UML和模式应用(架构师必备).part02.rar

    32.17 自反关联 32.18 使用包来组织领域模型 32.19 示例:Monopoly领域模型的精化 第33章 架构分析 33.1 过程:何时开始架构分析 33.2 定义:变化点和进化点 33.3 架构分析 33.4 架构分析的常用步骤 33.5 ...

    GDA反编译使用命令

    算法工具 实现加密解密功能,...对称加密:des idea rc2 rc4 rc4-40 rc2-40 rc2-64 bf cast5 aes(128 192 256)及其相应的模式如ecb cbc ofb cfb,其他模式如(cfb1 cfb8) 非对称加密:RSA 编码算法:base62, base64

    UML和模式应用(架构师必备).part06.rar

    32.17 自反关联 32.18 使用包来组织领域模型 32.19 示例:Monopoly领域模型的精化 第33章 架构分析 33.1 过程:何时开始架构分析 33.2 定义:变化点和进化点 33.3 架构分析 33.4 架构分析的常用步骤 33.5 ...

Global site tag (gtag.js) - Google Analytics