重构——30以类取代类型码(Replace Type Code with Class)

以类取代类型码(Replace Type Code with Class)

类之中有一个数值类型码,但它并不影响类的行为;以一个新的类替换该数值类型码

一、动机

让编译器可以进行类型检查,减少bug

二、做法

1、为类型码建立一个类

2、修改源类实现,并让它使用上述新建的类

3、编译,测试

4、对于源类中每一个使用类型码的函数,相应建立一个函数,让新函数使用新建的类

5、逐一修改源类用户,让它们使用新接口

6、每修改一个用户,编译并测试

7、删除使用类型码的新接口,并删除保存旧类型码的静态变量

8、编译,测试

时间: 2024-07-29 22:52:22

重构——30以类取代类型码(Replace Type Code with Class)的相关文章

重构——32以State/Strategy取代类型码(Replace Type Code with State/Strategy)

以State/Strategy取代类型码(Replace Type Code with State/Strategy) 你有一个类型码,它会影响到类的行为,但是你无法通过继承手法消除它:以状态对象取代类型码 一.动机 本项重构与Replace Type Code with Subclass很相似,但如果"类型码的值在对象生命期中发生变化"或"其他原因使得宿主类不能被继承",你可以使用本重构,本重构使用State模式或者Strategy模式 二.做法 1.使用Self

重构——31以子类取代类型码(Replace Type Code with SubClass)

以子类取代类型码(Replace Type Code with SubClass) 你有一个不可变的类型码,它会影响类的行为:以子类取代这个类型码 一.动机 1.借助多态来处理变化行为,标志就是switch if-then-else 2.把对不同类行为的了解从类用户那儿转移到了类自身 二.做法 1.使用Self Encapsulate Field将类型码自我封装起来 2.为类型码的每一个数值建立一个相应的子类.在每个子类中覆写类型码的取值函数,使其返回相应的类型码值 3.每建立一个新的子类,编译

.NET重构(类型码的设计、重构方法)

阅读目录: 1.开篇介绍 2.不影响对象中的逻辑行为(枚举.常量.Entity子类来替代类型码) 3.影响对象中的逻辑行为(抽象出类型码,使用多态解决) 4.无法直接抽象出类型码(使用策略模式解决) 1]开篇介绍 说到类型码,我们都会很有印象,在某个Entity内部多多少少会出现一两个类型码来表示当前Entity在某个抽象角度属于哪一种层面,比如在EmployeeEntity中,基本上会有一个表示性别的Sex的属性,同时Sex属性的最终保存是在某个sex字段中的,它就是很典型的类型码元素:Sex

WCF技术剖析之十三:序列化过程中的已知类型(Known Type)

DataContractSerializer承载着所有数据契约对象的序列化和反序列化操作.在上面一篇文章(<数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)>)中,我们谈到DataContractSerializer基本的序列化规则:如何控制DataContractSerializer序列化或者反序列化对象的数量:以及如何在序列化后的XML中保存被序列化对象的对象引用结构.在这篇文章中,我们会详细讨论WCF序列化中一个重要的话题:已知类型

重构——55以异常取代错误码(Replace Error Code with Exception)

以异常取代错误码(Replace Error Code with Exception) 某个函数返回一个特定的错误码,用以表示某种错误情况:改用异常 一.动机 代码的可理解性使我们虔诚追求的目标 二.做法 1.决定应该抛出受控异常还是非受控异常 2.如果调用者有责任在调用前检查必要状态,就抛出非受控异常 3.找到该函数的所有调用者,对它们进行相应调整,让它们使用异常 4.修改该函数的签名,令它反映出新用法

javase-Invalid type code: 71

问题描述 Invalid type code: 71 java.io.StreamCorruptedException: Invalid type code: 71这个代码是什么错误 在Oracle上根本找不到有关这个invalid type code:71的任何描述. 所以求大神们解答啊... 解决方案 不管是什么错误,反正是序列化的文件格式不对,要不然就是你的类型不是你序列化的类型. 解决方案二: 编译环境还不清楚,不知道如何分析 解决方案三: http://stackoverflow.co

C#通过第三方组件生成二维码(QR Code)和条形码(Bar Code)_C#教程

用C#如何生成二维码,我们可以通过现有的第三方dll直接来实现,下面列出几种不同的生成方法: 1):通过QrCodeNet(Gma.QrCodeNet.Encoding.dll)来实现 1.1):首先通过VS2015的NuGet下载对应的第三方组件,如下图所示: 1.2):具体生成二维码方法如下 private void GenerateQRByQrCodeNet() { QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H); Q

java-invalid type code: AC 很奇怪

问题描述 invalid type code: AC 很奇怪 最近在学习网络通信.然后弄一个服务器端不断监听,客户端连接,然后也处于不断监听服务端返回的消息.本来应很简单.但在客户端的监听线程里.第一次发送消息,服务器收到,并原消息返回,没问题.第二次,服务器能收到,但返回,客户端没收到,并出现:invalid type code: AC 这样都异常. 在网上查了好多问题,基本就两种,一种是 ObjectInputStream 多次定义,一种是 序列化问题.但是我两种都坚持尝试,都是不行. 如下

java.io.StreamCorruptedException: invalid type code: 62

问题描述 EJB+JBoss+SwingEJB部署在JBoss中,Swing调用EJB中的一个方法A(List<Object) lists),之后就报java.io.StreamCorruptedException: invalid type code: 62. 所传递的集合lists中起初包含一个未序列化的对象,但是我在调用A方法前将其移除后,还是报java.io.StreamCorruptedException: invalid type code: 62.请大家指点下 问题补充:Excep