由一个WF项目说起

很上时间没做什么让自已满意的项目了,除了做些方案、标书,主要就是接一些烂尾项目。
前段时间有幸又参与了一个与WF有关的烂尾项目。
对烂尾项目一般三条路:
1、马上结束,给用户退钱,处理问题人员
2、尽力完善,修改合同,以收回开发成本为目标
3、不惜一 切代价,完成项目

该选那条路,我从来不关心,从来只是充当第2、3条路的执行者。

有时常说自已像一个雇佣兵的队长,带着几个临时队员,向自已都不知道的目标进发。

但实际上我却总陷入一种无能为力的情况,举个例子:

一个病人,让我治疗,他得的是绝症(或者说以我的水平是回天无力),但我又不能直接将他操渡,只能看着他痛苦的挣扎,并一点点耗尽他家人的积蓄,而我已经麻木了,唯一敏感的就是这家人下个月只否还有钱付给我医疗费......

我的任务是冶病,给项目冶病。

我不喜欢、没兴趣、也没能力一遍遍分析项目的病因,是天灾还是人祸已经都不重要了,
我只想说:我想说:说:

使用最新的技术,是很多程序员向往的。但如果你是一个项目的设计人员,对某个新技术只了解了皮毛,没有作详细的可行性分析,就将该技术作为一个新项目的核心,我只能说你无知、愚蠢!

我不会轻易说一个技术人员无知、愚蠢,因为那同样是对我自已的不尊重。所以我不得不以小人之心看你,你对这个新技术感兴趣,你想借这个项目练手,成则万幸,不成你就换一家公司,当然你此时已经可以在简历中写上精通该技术了。

作项目就要脚踏实地,不要空谈,不要动不动就什么模式,什么架构,写的代码比混淆处理过的还难懂

这个烂项目算是完了,对他作了什么,只有我知道,

我是一个很有办法的医生,我有一种灵药,给癌症病人止痛非常有效,我不告诉你这是什么药,不是我保密,是我没脸说

使用WF开发系统,实际的流程都是在页面代码里写死的,然后直接操作数据库,我都佩服自已

 

心情严重不好,写段代码发泻一下:

我自创的,管他叫数据与控制相分离模式
通常会出现如下这种代码:

None.gif//一要改写的源型
None.gif
public class _ClassTest
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif
private int v1;
InBlock.gif
public int V1
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif
get dot.gifreturn v1; }
ExpandedSubBlockStart.gifContractedSubBlock.gif
set dot.gif{ v1 = value; }
ExpandedSubBlockEnd.gif}

InBlock.gif
private int v2;
InBlock.gif
public int V2
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif
get dot.gifreturn v2; }
ExpandedSubBlockStart.gifContractedSubBlock.gif
set dot.gif{ v2 = value; }
ExpandedSubBlockEnd.gif}

InBlock.gif
public int Add()
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
int temp = V1 + V2;
InBlock.gif
return temp;
ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif}

None.gif

我常用的写法:

None.gif//接口
None.gif
public interface IDataControl
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif
void saveToFile(string path);
InBlock.gif
void loadFromFile(string path);
InBlock.gif
void getXML();
InBlock.gif
void loadFromXML(string XMLString);
ExpandedBlockEnd.gif}

None.gif
None.gif
//数据
None.gif
[System.Serializable]
None.gif
public struct ClassTestData
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif
public int v1;
InBlock.gif
public int v2;
ExpandedBlockEnd.gif}

None.gif
None.gif
//控制
None.gif
public class ClassTest
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif
private ClassTestData Data = new ClassTestData();
InBlock.gif
public int V1
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif
get dot.gifreturn Data.v1; }
ExpandedSubBlockStart.gifContractedSubBlock.gif
set dot.gif{ Data.v1 = value; }
ExpandedSubBlockEnd.gif}

InBlock.gif
public int V2
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif
get dot.gifreturn Data.v2; }
ExpandedSubBlockStart.gifContractedSubBlock.gif
set dot.gif{ Data.v2 = value; }
ExpandedSubBlockEnd.gif}

InBlock.gif
InBlock.gif
public int Add()
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
int temp = V1 + V2;
InBlock.gif
return temp;
ExpandedSubBlockEnd.gif}

InBlock.gif
InBlock.gif
public void saveToFile(string path)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifSystem.Xml.Serialization.XmlSerializer xs;
InBlock.gifxs 
= new System.Xml.Serialization.XmlSerializer(Data.GetType());
InBlock.gifSystem.IO.FileStream file 
= new System.IO.FileStream(path, System.IO.FileMode.Create);
InBlock.gifxs.Serialize(file, Data);
InBlock.giffile.Flush();
InBlock.giffile.Close();
ExpandedSubBlockEnd.gif}

InBlock.gif
InBlock.gif
public void loadFromFile(string path)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifSystem.Xml.Serialization.XmlSerializer xs;
InBlock.gifxs 
= new System.Xml.Serialization.XmlSerializer(typeof(ClassTestData));
InBlock.gifSystem.IO.FileStream file 
= new System.IO.FileStream(path, System.IO.FileMode.Open);
InBlock.gifData 
= (ClassTestData)xs.Deserialize(file);
ExpandedSubBlockEnd.gif}

InBlock.gif
public string getXML()
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifSystem.Xml.Serialization.XmlSerializer xs;
InBlock.gifxs 
= new System.Xml.Serialization.XmlSerializer(Data.GetType());
InBlock.gifSystem.IO.MemoryStream m 
= new System.IO.MemoryStream();
InBlock.gifxs.Serialize(m, Data);
InBlock.gif
byte[] b = m.GetBuffer();
InBlock.gifSystem.Text.UTF8Encoding utf8 
= new System.Text.UTF8Encoding();
InBlock.gif
string XMLString = utf8.GetString(b);
InBlock.gif
return XMLString;
ExpandedSubBlockEnd.gif}

InBlock.gif
public void loadFromXML(string XMLString)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifSystem.Xml.Serialization.XmlSerializer xs;
InBlock.gifxs 
= new System.Xml.Serialization.XmlSerializer(typeof(ClassTestData));
InBlock.gifSystem.IO.MemoryStream m 
= new System.IO.MemoryStream();
InBlock.gifSystem.Text.UTF8Encoding utf8 
= new System.Text.UTF8Encoding();
InBlock.gifSystem.IO.TextReader tr 
= new System.IO.StringReader(XMLString);
InBlock.gifData 
= (ClassTestData)xs.Deserialize(tr);
ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif}

None.gif

使用

None.gifClassTest obj  = new ClassTest();
None.gif
None.gif
//赋值
None.gif
obj.V1 = 123;
None.gifobj.V2 
= 456;
None.gif
None.gif
//使用
None.gif
int v= obj.Add();
None.gif
None.gif
//保存到文件
None.gif
obj.saveToFile("C:\a.xml");
None.gif
None.gif
//从文件加载
None.gif
obj.loadFromFile("C:\a.xml");
None.gif
None.gif
//得到数据的XML串
None.gif
string s = obj.getXML();
None.gif
None.gif
//从XML串加载
None.gif
obj.loadFromXML(s);







 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值