下班回家之后,娃娃给我发了一个小学的数学题,题目如下,问题是求每天吃几片药以及连续吃三天,总共吃了多少片?

娃娃的解解法,根据问题一个一个步骤解答,最终遇到了Boss级别的问题,连续三天吃了多少片?正符合前一个问题的结果用于下一个问题的解答。当然啦,我也给了Boss级别的问题解答方法,如下:

当然解决Boss级别的问题之后问题还没结束。
1、如果最后问题改为连续吃五天的药?
2、如果前置条件改为每天两次,每次三片?
这就涉及到软件设计的问题,扩展性强弱决定了你对这些改动的适应能力。
情况::
1、需求改了,连续吃五天?
娃娃的解答很好,第一个函数模块计算每天的片数不用动,第二个函数功能块将参数天数变动即可
2、需求改了,每天吃二顿?
那好吧,第一个函数块计算次数由两次变为三次,第二个函数块根据次数计算片数功能不变
3、需求改了,每次吃三片?
这个吧,第一个函数块计算每天次数功能不变,第二个函数块根据次数计算功能由两片变为三片
4、需求改了。。。。
好吧,好吧,好吧,需求来回变动,不过只是数据变动了,这个时候函数块的功能是完整的而且分开完成指定的功能,可扩展还比较强一点。
最糟糕的情形是:如下
直接根据问题或者我们称之为需求为此设计了一个直接计算结果的函数,当数据发生变更,那么变动就很大了。
这就要求软件设计一定具有可扩展,需求变动也不可预料,能做的就是尽量适应,当然了,直接定稿的需求对于开发人员都是喜闻乐见的。但是也不能排除产品经理突然灵光一现。。。。
网友评论