少用代码生成器我们来分析一下,为什么我之前的前辈会写出上面的代码。我归结起来有以下几点:
至 今为止,还是很多人使用代码生成器,那么我们应该怎么对待这个问题呢。我认为,代码生成器确实可以减少你不少工作,但是少用,那些重复性的工作,除了部分 确实是没有办法的,其他大部分都是可以通过框架解决的,举例来说,像三层架构,真正需要用到代码生成器的,也就是Model类而已,其他的完全可以在框架 中完成。因此你要竭尽全力的思考怎么在框架中来减少你的重复性工作,而不是依赖于代码生成器。 另外,如果你还是在用相关的代码生成工具,请重新定义“动软代码生成器”的代码模板,自己写一个模板;或者使用CodeSmith来完全制定自己的代码生成,因为动软给的代码模板真心乱,比如下面这段代码: for (int n = 0; n < rowsCount; n++)
{
model = new DBAccess.Model.eventweek();
if(dt.Rows[n]["GroupNo"].ToString()!="")
{
model.GroupNo=int.Parse(dt.Rows[n]["GroupNo"].ToString());
}
if(dt.Rows[n]["Week0"].ToString()!="")
{
model.Week0=int.Parse(dt.Rows[n]["Week0"].ToString());
}
if(dt.Rows[n]["Week1"].ToString()!="")
{
model.Week1=int.Parse(dt.Rows[n]["Week1"].ToString());
}
}
首先,你就不能用 不要重复发明轮子我们再来看看其他的一些代码: public List<string> GetDevices(string dev){
List<string> devs=new List<string>();
int start=0;
for(int i=0;i<dev.Length;i++){
if(dev[i]=='^'){
devs.Add(dev.SubString(start,i));
start=i+1;
}
}
return devs;
}
有没有很眼熟,没错,这就是对
那么,我们应该怎样去避免重复发明轮子呢?我从个人的经历来提出以下几点,希望能够对各位有所帮助:
这 里我再举一个我自己的例子。在我现有的程序中,我发现我需要越来越多的线程来执行一些简单的任务,比如在每天检测一下硬盘是否达到90%了,每天9点要控 制一下空调的开启而在网上6点的时候把空调关掉。线程使用越来越多,我越是觉得浪费,因为这些现场仅仅只需完成一次或者有限的几次,大部分时间都是没有意 义的,那么怎么办呢?我决定自己写一个任务类,来完成相关的事情。说干就干,我很快把这个类写出来了。 public abstract class MissionBase : IMission
{
private DateTime _nextExecuteTime;
protected virtual DateTime[] ExecuteTimePoints { get; private set; }
protected virtual int IntervalSeconds { get; private set; }
protected IEngine Engine { get; private set; }
public bool IsCanceled{get{……}}
public bool IsExecuting{get{……}}
public bool IsTimeToExecute{get{……}}
public abstract bool Enable { get; }
public abstract string Name { get; }
protected MissionBase(IEngine engine)
{
ExecuteTimePoints = null;//默认采用间隔的方式
IntervalSeconds = 60 * 60;//默认的间隔为1个小时
Engine = engine;
}
/// 任务的执行方法
public void Done()
{
if (Interlocked.CompareExchange(ref _isExecuting, 1, 0) == 1) return;
try
{
……
}
finally
{
Interlocked.CompareExchange(ref _isExecuting, 0, 1);
}
}
///实际方法的执行
protected abstract void DoneReal();
}
但是,实际上这个任务方法,并不好用,要写的代码不少,而且可靠性还没有保障。当然,我可以继续完善这个类,但是我决定搜索一下是否还有其他的方法。直到有一天,我再次阅读《CLR Via C#》,看到线程这一章,讲到了 因为从原理上来说, |