如何重构代码如何重构代码-简单、灵活的实现对象复制简单、灵活的实现对象复制
前两篇(思路和方法、重构计划)从大的方面上谈了关于重构的话题,这次从小的代码上来看。我们来看下一个的代码如何从简单到复杂,然
后重构这些代码。
单个对象复制单个对象复制
在初步的需求中有个很简单的业务,就是定义销售合同,并且合同中可以配置产品设备数据,如下:
其中有个业务功能就是需要对已经存在的销售合同进行复制、剪贴和粘贴的工作。
对于程序来说,它其实就需要实现IClone接口就可以了,
代码
/// <summary>
/// 复制
/// </summary>
public object Clone()
{
TestObj copiedObj = new TestObj();
copiedObj.Parent = null;
copiedObj.Name = this.Name;
foreach (TestObj obj in this.Child)
{
TestObj childCopiedObj = obj.Clone() as TestObj;
childCopiedObj.Parent = copiedObj;
copiedObj.Child.Add(childCopiedObj);
}
return copiedObj;
}
OK,这很好的实现了业务需求。
批量复制不同对象批量复制不同对象
业务需求发生了变化,现在对于前期简单的销售合同进行了完善,同时让它变得异常复杂,如下图,
现在要求在所有内部对象都支持复制、剪贴和粘贴,并且也要支持每个部分的数据可以独立导出为特殊的文件,作为数据模板,对于其他合同
为了简化操作可以将该模块导入,这些动作在实现前都必须要执行复制,前面的动作不用说都可以理解,对于后面的导入和导出来说,虽然主
要通过序列化来支持,但是由于业务特殊性也必须先做复制操作,然后需要对复制后的数据做特殊处理,然后才去序列化。
对于这次的需求来说,很多人的实现方式是对每个类都模仿Clone的方式来写自己的复制方法,这种方式一定是正确的,并且性能是最好的,不
过它也是代码量最多的,同时随着业务的进一步完善,它的代码会越来越多。
按照上述的方式来实现,可能需要两周左右的时间,可以想想有没有办法减少开发时间呢?而且也让以后的开发时间减少?
想了很久,终于有了一种思路: