分享
 
 
 

没头没尾--项目开发笔记:如何开发代码更新工具?!(上)

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

12月31号:2002年的最后一天,天气不错!!希望明年天天都是好天气,也希望所有的IT从业人员新年好,天天快乐!

好长时间没有更新项目笔记了,并不是因为我们的项目没有什么进展。而是我要期末考试!郁闷。昨天好不容易考完了我最怕怕的English. 总算可以重新开写项目笔记罗。

上篇的项目笔记有朋友问我们代码如果始用自动生成之后,如何进行更新?如何保留生成地代码变化部分?这篇文章主要是讲讲这方面的内容。如果对代码生成工具不了解,可以参考以前的项目笔记。

http://www.csdn.net/develop/author/netauthor/ViktorYu/

以下所写的部分还是实现“异常处理与日志记录代码自动生成”文章中所说的功能,实际上要在一堆的Web Service代码文件中加入或更新代码的过程为例,说明代码生成工具与代码更新工具的开发与使用。

l 代码生成时对应生成的代码特殊规则

一段使用代码生成工具植入的代码是否可以进行整个文件修改之后的重新更新,最为关键的一点是你的代码更新工具是不是可以定位此段的代码,以及生成的代码是不是已经被破坏。所谓破坏是指明生成的代码已经被各个开发人员进行了个性化的修改,无法使用统一的规则进行更新处理。换句话说,你在设计要植入的代码时就需要对代码进行比较细的拆分,使得植入的代码保证原子性。这就要求在生成代码时,必须要对代码加入一些对应的规则。这一篇主要讨论比较简单的代码更新,可能还用不要这些特殊的规则,以后将会讨论比较复杂的代码更新,将会对生成的代码的规则做出更加细致的字义。这种情况下更新的数据可以只更新预先定义好的部分,并可以保留目标代码文件中其它的部分。

l 代码更新的原则与方案

下面分别从代码更新所需要的输入原则,代码更新的替换原则,以及有代码更新的最后所要输出的原则讨论代码更新的原则与方案。

代码更新工具的过程简单来说是两个步骤:第一步是找出被更新文件中是否要更新的那部分代码;第二步是将新的代码替换那部分要更新的代码。这里我使用了一个XML格式的模板文件来记录文件基本信息,被更新的代码,以及新的要植入的代码。

Ø 代码更新的输入

代码更新的输入包括两个部分:

² 原始文件(目录)

原始文件存放的地方,可以通过原始文件目录的搜索找出所有要进行代码更新的文件。比如我所参与的项目中,我将所有的Web Service文件放在c:\inetpub\wwwroot\projects之中,我要修改的是所有的以后缀名为.asmx.cs(Web Service在我们的项目中采用的C#进行开发的,其它的具体情况可以参见以前的文档)的文件。那么原始文件输入为c:\inetpub\wwwroot\projects,我将通过遍历目录结构的方式,将所有的Web Service的文件找出,并执行代码更新的工作。

² 模板文件

模板文件为代码更新提供了被更新的代码的版本,新植入的代码的版本,以及使用这个模板文件的标识。下面是我的模板文件的一个例子:

TryandCatch.XML文件:

<?xml version="1.0" encoding="gb2312" ?>

<CodeTemplate>

<TemplateTag>

//**?? 已经使用TryandCatch.xml模板文档 ??**//

</TemplateTag>

<CodeSession value="Try">

<oldsource>

//**严禁修改以下代码**//

//insert trytry

//**严禁修改以上代码**//

</oldsource>

<newsource>

//**严禁修改以下代码**//

//insert try

try{

//**严禁修改以上代码**//

</newsource>

</CodeSession>

<CodeSession value="Catch">

<oldsource>

//**严禁修改以下代码**//

//insert catchcatch

//**严禁修改以上代码**//

</oldsource>

<newsource>

//**严禁修改以下代码**//

//insert catchcatch

}

catch(CommonException e){

return e.ErrorObject;

}

catch(Exception e){

try{

throw new ExceptionHandler.CommonException(e);

}

catch(CommonException ee){

return ee.ErrorObject;

}

}

finally{

}

//**严禁修改以上代码**//

</newsource>

</CodeSession>

</CodeTemplate>

上面的XML模板文件中,一共有两种节:

1.<TemplateTag>

<TemplateTag>节中间的内容代表是不是本模板的内容已经被植入了目标代码文件中,如果目标代码文件中没有找到<TemplateTag>节中的内容,则可以判断出目标还没有植入本模板的代码,那么直接使用<newsource>中的内容植入;如果目标代码文件中没有找到<TemplateTag>节中的内容,则可以判断出目标已经植入本模板的代码,那么使用<newsource>中的内容替换<oldsource>中的内容。

2.<CodeSession>

每一个CodeSession中的内容存放了以前植入的代码,本次需要植入的代码。以前值入的代码放在<oldsource>中,本次需要植入的代码放在<newsource>中。当需要对代码进行替换时,可以只需要修改模板文件(将原来的<newsource>节中的内容拷贝到<oldsource>节中,然后将需要新植入的代码放入<newsource>节中),再重新执行一次代码更新工具就可以了。

(待续下篇http://www.csdn.net/develop/article/16/16309.shtm)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有