`
yaasshole
  • 浏览: 665577 次
文章分类
社区版块
存档分类
最新评论

最佳程序设计探索之一:需求驱动编写自顶向下的代码

 
阅读更多

写一段文字描述程序要完成什么样的功能,然后将这段文字的名词转换成类或者类的属性,将动词转换成类的方法。这是80年代中期的经典做法。

<<设计模式解析>> 2nd 开篇就说,上述方式有局限性,因为只关注了如何实现对象,是不完整的解决方案。或许只应该是解决方案中的一部分。

我目前的做法是,仍然用一段文字来描述程序要完成什么样的功能,根据自己的经验(当然也包括名词和动词分析法)写出调用代码,然后再慢慢实现每个类。我这个方法有个出处,源自于Bob的敏捷软件开山之作里面描述的测试驱动编程。他的原意是写一个Unit test,然后慢慢的实现所有的类和方法,最终让Unit test通过。但是很多时候,Unit test并不那么容易建立,画UML里面的时序图感觉代价比较高,我更愿意通过代码来讲述故事大纲,就像写作文先写提纲一样。

举个例子:用户登录网站,如果用户名、密码、验证码都正确,可以登录。在这个后台验证程序逻辑里面,我用如下代码将故事大纲先写好:

User user = UserManager.login(id,password,authenKey);

if(user!=null){

log.info("User logs into web site successfully");

}

然后实现细节在UserManager类里面逐层展开,要做如下工作:

1)检查验证码

2)通过SHA256算法,计算密码是否正确

3)如果验证通过,创建User对象,里面包含了用户信息,并返回

4)错误处理,如果验证失败,则抛出异常告知哪种错误,错误可能有几种,比如验证码错误,用户名或者密码不正确。

由于有错误处理,所以调用代码修改为:

try{

User user = UserManager.login(id,password,authenKey);

log.info("User logs into web site successfully");

//do something for correct user

}catch(LoginException ex){

log.error(ex.getMessage(),ex);

//do something for wrong authentication

}

然后就开始实现User,UserManager,LoginException类。可能还需要一个类来处理验证码,一个类来处理SHA256算法。

在设计类的时候,尽量遵守单一职责原则,组合优于继承原则等等。后面会继续谈到。

我自己概括我的方式为:需求驱动编写自顶向下的代码。这种方式的优点是细节将被逐层展开,容易把握大方向,避免一上来被细节牵着走,写出复杂而难以维护的代码。而且避免了绘制UML图带来的高成本,慢进度。用程序来讲故事,是非常自然的事情。不过这种方式必须结合不断的重构,可能由于特殊的需求引入一些算法和模式,改变了故事大纲。一个程序的代码,就像一个生命体,是不断演化,甚至积累到一定程度和初始面貌截然不同。

分享到:
评论

相关推荐

    MFC Windows程序设计(第2版修订版)--源代码

    本书的作者,jeff prosise,用其无与伦比的技巧向读者讲述了mfc程序设计中的基本概念和主要技术——再次阐释了在32位windows平台上进行了快速的面向对象开发的完美方法。  本书涵盖了以下专题:  事件驱动程序设计...

    Python语言程序设计习题答案.zip

    Python程序设计的书籍已经琳琅满目,每一本书都凝聚了作者对Python的理解和对程序设计的认识,都是作者编程开发和教学经验的总结,都折射出作者的专业背景。由于大数据专业学生对程序设计的要求不是很高,但又需要...

    Python语言程序设计源代码.zip

    本书围绕数据的表示、存取、计算、分析和可视化等内容分两部分详细介绍Python语言程序设计:Python程序设计基础部分(第1章至第6章、第10章)主要介绍Python作为一门高级编程语言所涉及的语法知识、控制结构、函数与...

    windows 程序设计

    因为这些窗口看起来有些像桌面上的纸(当然,这是计算机还未占据办公桌之前的年代),Windows有时被称作:一个显示多个程序的「具象化桌面」。 Windows的早期版本使用一种「非优先权式(non-preemptive)」的多任务...

    基于记录的应用程序设计

    先设计一个包含了必需信息的数据结构,用自顶向下的方法从最高层的结构开始设计,再逐渐增加细节并完善。数据库的设计中有一个重要概念—封装:将相关的信息结合起来放入结构中,并作为整体处理。对于一个大型...

    windows驱动开发技术详解-part2

    本章向读者呈现两个最简单的Windows驱动程序,一个是NT式的驱动程序,另一个是WDM式的驱动程序。 这两个驱动程序没有操作具体的硬件设备,只是在系统里创建了虚拟设备。在随后的章节中,它们会作 为基本驱动程序...

    Python语言程序设计PPT课件.zip

    Python程序设计的书籍已经琳琅满目,每一本书都凝聚了作者对Python的理解和对程序设计的认识,都是作者编程开发和教学经验的总结,都折射出作者的专业背景。由于大数据专业学生对程序设计的要求不是很高,但又需要...

    Windows驱动开发技术详解的光盘-part1

    本章向读者呈现两个最简单的Windows驱动程序,一个是NT式的驱动程序,另一个是WDM式的驱动程序。这两个驱动程序没有操作具体的硬件设备,只是在系统里创建了虚拟设备。在随后的章节中,它们会作为基本驱动程序框架,...

    C#测试驱动开发

    在用c#编写的源代码及示例的帮助下,作者带您从头到尾体验tdd方法,并向您展示如何将这一方法应用于一个现实应用程序中。在研究这个应用程序时,我们将从头构建它,执行开发过程中的每个步骤,解决出现的问题。相信...

    基于记录应用程序设计

    先设计一个包含了必需信息的数据结构,用自顶向下的方法从最高层的结构开始设计,再逐渐增加细节并完善。数据库的设计中有一个重要概念—封装:将相关的信息结合起来放入结构中,并作为整体处理。对于一个大型...

    自己动手写操作系统(含源代码).part2

    历史上的 Linux就是这么产生的,Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件...

    单片机接口技术实用子程序电子书及其配套源代码

    6.7.3 驱动程序设计 307 6.8 子程序39——微型打印机在单片机系统中的应用 308 6.8.1 CENTRONICS标准 308 6.8.2 SP-M系列微型打印机介绍 309 6.8.3 接口电路设计 311 6.8.4 程序设计 312 第7章 数据采集与控制 317 ...

    代码之美(中文完整版).pdf

    第9章 自顶向下的运算符优先级 9.1. JavaScript 9.2. 符号表 9.3. 语素 9.4. 优先级 9.5. 表达式 9.6. 中置运算符 9.7. 前置操作符 9.8. 赋值运算符 9.9. 常数 9.10. Scope 9.11. 语句 9.12. 函数 9.13. 数组和对象...

    MFC Windows程序设计(第2版修订版)--详细书签版1卷

    本书的作者,jeff prosise,用其无与伦比的技巧向读者讲述了mfc程序设计中的基本概念和主要技术——再次阐释了在32位windows平台上进行了快速的面向对象开发的完美方法。  本书涵盖了以下专题:  事件驱动程序设计...

    语言程序设计课后习题答案

    结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。 虽然结构化程序设计方法具有很多的优点,...

    MFC Windows程序设计(第2版修订版)--详细书签版2卷

    本书的作者,jeff prosise,用其无与伦比的技巧向读者讲述了mfc程序设计中的基本概念和主要技术——再次阐释了在32位windows平台上进行了快速的面向对象开发的完美方法。  本书涵盖了以下专题:  事件驱动程序设计...

    Python程序设计:TCP-Socket编程.pptx

    它是TCP/IP网络环境下应用程序与底层通信驱动程序之间运行的开发接口。 它可以将应用程序与具体的TCP/IP隔离开来,使得应用程序不需要了解TCP/IP的具体细节,就能够实现数据传输。 TCP-Socket编程 Socket层级关系 ...

    WIN XP蓝屏代码大全

    ◆错误分析:一个与系统内存管理相关的错误, 比如:由于执行了大量的输入/输出操作, 造成内存管理出现问题: 有缺陷的驱动程序不正确地使用内存资源; 某个应用程序(比如:备份软件)被分配了大量的内核内存等. ◇解决方案...

    JAVA上百实例源码以及开源项目源代码

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

Global site tag (gtag.js) - Google Analytics