• 2009-09-24

    囧驼 - [单纯转载]

            ┏┓   ┏┓
           ┏┛┻━━━┛┻┓
           ┃       ┃  
           ┃   ━   ┃
           ┃...

  • delphi 的线程 TThread 可以使用一下几种方法结束:

    1) 自动退出:execute

      一个线程从execute()过程中退出,即意味着线程的终止,此时将调用windows的exitthread()函数来清除线程所占用的堆栈。
      如果线程对象的 freeonterminate 属性设为true,则线程对象将自动删除,并释放线程所占用的资源。
      这是消除线程对象最简单的办法。

    2) 受控退出:t...
  • 1. 注重实效的团队

    不要保留破窗户。
    主动监视环境的变化。
    交流,文档一致,团队的风格。
    不要重复,良好的资料管理。
    正交性,围绕功能而不是工作职位组织团队。
    自动化,自动化办公可以提高效率。
    ... ...

  • 1. 需求之坑

    (1)挖掘需求
    需求往往隐藏在更深的层面,而且很难用文字表述清楚。
    商业政策不应被硬性地写入需求,它们经常改变。
    比如:“只有人事部们才能查看员工档案”,这是一个政策描述;
    “只有授权用户才能查看员工档案”,这是一个需求描述。

    需求应该着眼于用户做某件事情的原因,而不是做事情的方式。
    “成为用户”,能更深入地了解需求。...

  • 1. 靠巧合编程
    有些情况下,程序只是由于一些偶然因素才运行得不错。这些程序没有在更极限的边界情况、或是一个新的环境、一个新的扩展下接收考验,甚至没有经过程序员自己的仔细斟酌,这是危险的。

    一些约定上的误解、不规范的测试、文档中隐含的动作,都使程序成为一个巧合的短暂成功。

    一些有效编码的建议:
    <a> 时刻意识到在做什么。
    <b> 不要盲目编程。要按照计划行事。
    <c> 依靠可靠的...
  • 本章旨在探讨,怎样生产出灵活、柔软的程序。

    1. 解耦与得墨忒(tei)耳法则

    在使用对象内部的某个属性时,不要用贯穿的方法去直接读取,应该使用一个包装过的读取函数。

    得墨忒耳法则规定,某个对象中的任何方法内部,都应该只调用以下内容:
    <a> 它自身。
    <b> 传入该方法的任何参数,但不包括参数对象的属性。
    <c> 方法内部创建的任何对象。
    <d>...
  •        像c#,java这样的语言编译后不是二进制代码,而是可以解释执行的一种东西,这样在我们调试的时候,如果出错了,报的错可以显示错误所在的堆栈,方法,行号(当然,你release编译或者把pdb调试文件去了就没行号了),而Delphi就不行了。如果你在异常处理里想把异常出现的堆栈,方法和行号输出出来简直是不可能的。但有个你变通的方法,就是使用断言,断言在调试状态下可以指出错误行号(其实我编译生成exe后好像也可以输出源文件的行号,...

  • 不可能写出完美的软件,因此程序员应该针对自己的错误进行防卫性编码。

    1. 按合约设计
    坦率是交流过程中最好的解决办法,用合约规定双方的权力和义务。

    按合约设计(DBC):
    用文档记载并约定软件模块的权力与责任,确保程序的正确。

    一个程序业务例程的约定包括以下方面:
    <a> 前提条件:执行例程之前必须满足的条件。
    <b> 后条件:例程完成后,世界的状态。
    <...
  • 1. 纯文本的威力

    用纯文本保存知识,这样可以方便地在各种环境下使用和管理。

    威力:
    <a> 不会过时:即使使用纯文本数据的应用已经不存在了,这些数据仍可以被其他的应用使用。
    <b> 杠杆作用:每一种计算机工具都可以处理纯文本。(Unix系统更是纯文本成功的范例)
    <c> 容易测试:很方便修改纯文本的输入,纯文本的输出结果也易于分析。

    ...... ......

  • 1. 重复的危害

    软件系统中所使用的知识,是会不稳定变化的。比如市场环境的改变,政府决策的变化。
    当知识变化的时候,软件系统的基础就出现了错误,这时就需要维护。
    维护不应该只存在于软件的发布阶段,而是应该贯穿于开发过程的始终。

    ...... ......