综合

img qiubolecn

对象的关系

发表于2004/12/29 22:17:00  733人阅读

今天趁着第一个阶段编码的结束,花了点时间将几个关键对象重构了一次,现在看看,代码还是流畅多了,看来用测试驱动开发,还是比较好的,虽然看起来时间花上去了,但心里有了底,而且也给测试减少了一些工作,重构的时候不再是那么胆小了。
用DUNIT很不习惯的一点就是,不像其它的自动化测试工具那样,能够对界面进行处理,虽然写的代码与界面关系已经不大了,但有时还是免不了漏掉些事情。
把今天的流水账记一下吧
1、写代码时,发现A对象依赖于B对象,发现有几个新功能的增加使得B对象也依赖于A对象,这可真是糟透了,先是懒着在B对象中引用A对象,运行测试,通过,然后在A对象中提出了一个接口,用于让B对象来访问,这种做法是对了,但不知道别人知道我的意图没,备注又少不了得花一大段了。
2、有A,B,C三个对象,关系为
  TB = class
     .........
  end

  TC = class
     ......
  end;

  TA = class
    B: TB;
    Cs: TObjectList;         //这里存的是TC的集合,真想用一个TCs对象来处理。一是可以良好的封装,二是看起来也顺眼
  end; //先不管了,还是按照快速开发的原则,功能完成了,但进行重构吧。
3、重命名一些变量,有一些变量最初起得倒是比较好的,但后来由于新的功能的增加,就发现该变量会让人误解,花几分钟将他们一一命名还是比较值得的。 还是老规矩,先改声名,再运行,哪个报错再改哪个,这样比SEARCH还是来得保险,速度还快。
4、在MSSQL中要写一个加密的算法,查了半天,竟然发现MSSQL不支持转换成十六进制,最后发现,自己写一个的速度比查起来要快得多,没几分钟就搞定了,自己还真是懒,这可不是一个好程序员的习惯,同时还发现STR函数竟然会导致多余空格。
5、在想在MSSQL中通过OPENDATASOURCE来访问PARADOX表,可惜啊,找很长时间都没有找到解决办法,访问ACCESS是可以的,访问PARADOX,要OLEDB-》ODBC-》PARADOX,理论上是行的,为什么最后总是提示没有权限或是不存在相应的表呢,真是郁闷。
6、下午和一个同事讨论了生成HTML表格的办法,同事还真怪,一心想用这个控件,用那个控件,结果出来的东西不好操作,不好定义,还得花很长的时间来写,没办法了,只能倚老卖老了。
       我将表格分成表头,行(字段名,值),列,三个部分,分别存放在ini文件里面,然后从数据表中读数据,依次生成STRING,结果发现,这样的效果还是非常不错的,不像那种用 <table> ...<tr>..<td> </td>.</tr>.</table> 死板,无法更改表格的属性,而且还可以用到风格纸。呵,值得发场,代码是非常的简单,但还是要贴一下的。

var
  I: Integer;
  tmpStringList: TStringList;
  IniFile: TIniFile;
  tmpStr: string;
  tmpStr1: string;

  tmpCol1: string;
  tmpCol2: string;
begin
  IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'grid.ini');
  tmpStringList := TStringList.Create;
  try
    tmpStringList.Append(IniFile.ReadString('grid', 'Table_B', '<table>'));
    tmpStringList.Append(IniFile.ReadString('grid', 'Row_Title_B', '<tr>'));
    tmpStr := IniFile.ReadString('grid', 'Column_Title_B', '<td>');
    tmpStr1 := IniFile.ReadString('grid', 'Column_Title_E', '</td>');
    for I := 0 to ADoquery1.FieldCount - 1 do
    begin
      tmpStringList.Append(tmpStr + ADOQuery1.Fields[I].FieldName
                            + tmpStr1);
    end;

    tmpStringList.Append(IniFile.ReadString('grid', 'Row_Title_E', '</tr>'));

    tmpStr := IniFile.ReadString('grid', 'Row_Content_1_B', '<tr>');
    tmpStr1 := IniFile.ReadString('grid', 'Row_Content_1_E', '</tr>');

    tmpCol1 := IniFile.ReadString('grid', 'Column_Content_B', '<td>');
    tmpCol2 := IniFile.ReadString('grid', 'Column_Content_E', '</td>');

    ADOQuery1.Last;
    ADOQuery1.Prior;
    ADOQuery1.Prior; //数据太多,就显示三条吧.

    while not ADOQuery1.Eof do
    begin
      tmpStringList.Append(tmpStr);
      for I := 0 to ADoquery1.FieldCount - 1 do
      begin
        tmpStringList.Append(tmpCol1 + ADOQuery1.Fields[I].AsString
                              + tmpCol2);
      end;
      tmpStringList.Append(tmpStr1);

      ADOQuery1.Next;
    end;


    tmpStringList.Append(IniFile.ReadString('grid', 'Table_E', '</table>'));
  finally
  Memo1.Lines.Assign(tmpStringList);
    tmpStringList.Free;
    IniFile.Free;
  end;
配置文件如下
[grid]

Table_B=<Table border="0">  //在这里放风格纸,定义表格的属性还是非常不错的。
Table_E=</Table>

Row_Title_B=<tr>  //字段头的属性,就在这里定义吧,反正会读。
Row_Title_E=</tr>

Column_Title_B=<td><font color = green>
Column_Title_E=</font></td>

Row_Content_1_B=<tr>
Row_Content_1_E=</tr>
Row_Content_2_B=<td>
Row_Content_2_E=<td>
Row_Content_3_B=<td>
Row_Content_3_E=<td>

Column_Content_B=<td><font >


Column_Content_E=</font></td>

阅读全文
0 0

相关文章推荐

img
取 消
img