关于程序设计的思考

场景(本场景纯属虚构):国家推出福利,让每个有小孩的家庭都可以申领补贴。需要申领补贴的人,需要在S系统里面填写表单,填好小孩的资料,然后提交申请。有关人员将在S系统进行审批,走完流程之后方可发送补贴。按照目前的政策,每个家庭只能为1个小孩申请补贴。基于这项福利,我需要在S系统添加相应功能。

这种场景比较典型。我现在就把目光聚焦在“每个家庭只能为1个小孩申请补贴”这一点上。我可能会在下面两种方案中选择一种:        (1)既然每个家庭只能为1个小孩申请补贴,那么,我只考虑“1个表单只包含一个小孩信息”这种情形,而不考虑“1个表单里面可能包含多个小孩信息”这种情形。        (2)考虑到将来国家政策可能改变,我在设计时,直接就按照“1个表单里面最多能有N个小孩信息”这种情形设计(把N看成参数,而不会把N假设成1)。然后我再为N这个参数传入常量1。
        很明显,(2)方案更灵活,更容易适应需求。但是与(1)方案相比,(2)方案比较复杂,真正实现时会耗费较多的人力物力。假如最后国家一直不改变政策,那么,我岂不是白白耗费成本?————有时候,国家的确变更了政策,但是变更的方式并非想象中的“允许为多个小孩申请补贴”,而是直接取消这项补贴福利,那么,我为了“灵活”而作的考虑,就成为笑谈了。        另一方面,(1)方案虽然比较简单,但假如国家真的改变了政策,允许一个家庭为多个小孩申请补贴,那么,变更所带来的工作量,会比较可观。从项目管理角度看,如果需求变更引起了工作量,我可以对客户多收钱。但假如客户有一点技术功底,知道工作量与“不灵活的设计”有关,那么,要说服客户多付钱,还真有难度。

时间: 2024-11-05 18:37:47

关于程序设计的思考的相关文章

由Node.js事件驱动模型引发的思考

引言 近段时间听说了Node.js,很多文章表述这个事件驱动模型多么多么优秀,应用在服务器开发中有很大的优势,本身对此十分感性去,决定深入了解一下,由此也引发了一些对程序设计的思考,记录下来. 什么是Node.js Node.js在官网上是这样定义的:"一个搭建在Chrome JavaScript运行时上的平台,用于构建高速.可伸缩的网络程序.Node.js采用的事件驱动.非阻塞I/O模型使它既轻量又高效,是构建运行在分布式设备上的数据密集型实时程序的完美选择." Node.js的事件

RubyProgramming:向Ruby之父学程序设计pdf

下载地址:网盘下载 内 容 简 介 编辑 Ruby是为了让程序设计更快乐而开发的程序语言.Ruby具有"彻底面向对象"."丰富的程序库"."亲和力高的直观语法形式"等多项特征,但这些特征并不是Ruby的目的,只能说是为了让程序设计更有趣而开发的手段罢了. 希望本书的读者,都能从使用Ruby的过程中,找到属于自己的"兴趣"与"乐趣".──若您可以这样灵活运用,那将是本书作者无上的荣幸了. 审校者序 编辑 正如

程序设计中关于异常机制的思考

程序的运行过程从来都不是一帆风顺的,运行期间会遇到各式各样的突发状况,如文件打不开.内存分配错误.数据库连不上等等.作为一个进阶过程中的编程人员,思考和处理例外状况极为重要.因为它在很大程度保证了程序的连贯性和稳定性,并为问题的发现提供支撑. 下面就本人在编程过程中有关异常的编程范式做一下总结. 一.面向过程形式 面向过程式的范式将异常的传递都交于函数的参数与返回值来处理,如: bool func ( const InType& input, OutType& output, string

程序设计与搏击之思考

搏击的终极解读是攻和守之道,程序设计的终极解读是变与不变. 了解截拳道的人都知道,截拳道的哲学思想,来源于阴阳学说,李小龙给截拳道的终结定义就是: "以无法为有法,以无限为有限." 可是这样两句话,我们如何来理解呢?说下我的理解吧. 无和有,本是对立,所谓以无法为有法,就是法无定法,我们都知道,在搏斗的领域里,总要有一个对手,和自己进行对立,如果我们把自己定为无,而对方为有,这里的无法为有法, 就是自己根据对方的行动来行动,就如同毛爷爷说的:敌进我退,敌退我打.思想是一致的,关键不在我

《C程序设计语言》关于单词计数的思考

代码分析 源代码来源于Brian W. Kernighan 和 Dennis M. Ritchie 共同编著的书籍 <The C Program Language> 中1.5.4节中的单词计数. 中文版原文:这里对单词的定义比较宽裕,它是任何其中不含空格.制表符或换行符的字符序列,下面这段程序是UNIX系统中wc程序的骨干部分. #include<stdio.h> #define IN 1 /* 单词内 */ #define IN 0 /* 单词外 */ main() { int

Java精品高级课,架构课,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,视频教程

36套精品Java架构师,高并发,高性能,高可用,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,P2P金融项目,大型分布式电商实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Elasticsearch,Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.java8新特性,P2P金融项目,程序设计,

20155208徐子涵 2016-2017-2 《Java程序设计》第6周学习总结

20155208徐子涵 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 10.1.1 1.Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象. 2.若要将数据从来源中取出,可以使用输入串流:若要将数据写入目的地,可以使用输出串流.在java中,输入串流代表对象为java.in.InputStream的实例:输出串流代表对象为java.io.Outputstream的实例. 3.read()方法每次尝试读取数据,并返回实际读入的,只要不是负一

第十篇 面向对象的程序设计

第十篇 面向对象的程序设计 阅读目录 一 面向对象的程序设计的由来 二 什么是面向对象的程序设计及为什么要有它 三 类和对象 3.1 什么是对象,什么是类 3.2 类相关知识 3.3 对象相关知识 3.4 对象之间的交互 3.5 类名称空间与对象/实例名称空间 3.6 小结 四 继承与派生 4.1 什么是继承 4.2 继承与抽象(先抽象再继承) 4.3 继承与重用性 4.4 组合与重用性 4.5 接口与归一化设计 4.6 抽象类 4.7 继承实现的原理(继承顺序) 4.8 子类中调用父类方法 五

20155335俞昆《java程序设计》第十周总结

学号 2016-2017-2 <Java程序设计>第十周学习总结 ## 事实上网络编程,我们可以简单的理解为两台计算机相互通讯数据而已,对于程序员而言,掌握一种编程接口并使用一种编程模型相对而言就简单多了,javaSDK提供了一些相对简单的Api来完成12这些工作,Socket就是其中之一,对于java而言,Api的存在和java.net包里面.因此只要导入这个包就可以准备网络编程了. 客户机到服务机的模型就是网络编程的基本模型,简单的说就是引进这两个进程之间的相互通信,其中一个必须提供固定的