关于 软件设计 OOP 和 迭代进化

2015-05-03 19:45:08 +08:00
 whatisnew

有过很多开发经验的人应该都知道,软件开发一开始的需求都是预估的。

在这样一个预估的需求下进行(重度OOP)设计,但是,快速迭代时,需求三天一小变,五天一大变,那么很快发现就这种(重度OOP)变成了累赘。。。严重拖慢了开发效率,产生了大量的废弃接口,不停的变更设计模式

那么就引申出来了两个问题:

  1. 软件是迭代进化来的
  2. 还是设计出来(足够满足三天一小变,五天一大变的业务需求)的
2339 次点击
所在节点    程序员
9 条回复
endrollex
2015-05-03 20:20:32 +08:00
设计的本意是计划、规划,进行预先的构思,也就是软件构架,更换那就是重构了,需求和功能都是构架设计下留有足够余地能方便实现,频繁变化说明设计本身有缺陷
lxrmido
2015-05-03 20:27:26 +08:00
有本书:《恰如其分的软件架构》,对这个问题有比较详细的探讨,不过,变得这么频繁的话,肯定是哪里出错了吧
sivacohan
2015-05-03 22:21:37 +08:00
变化这么频繁。需要确定是需求从宫保鸡丁变成了水煮鱼。还是最开始人家要满汉全席,你给理解为了沙县小吃。
whatisnew
2015-05-04 02:10:41 +08:00
我说的 “三天一小变,五天一大变”,不是字面意义上的每3〜5天就变

大家可以理解成:三天(=3〜6个月),五天(=一年左右)

小变,比如:
一个 b2c 业务,原本结账需要用户授权,现免授权(但是在结构页增加了很多非预期字段)
大变,比如:
一个 b2c 业务,改成 b2b2c 业务。。。
victor
2015-05-04 09:21:32 +08:00
设计的目的就是让你将来在需求变化的时候,改起来更容易点。
cover
2015-05-04 09:48:48 +08:00
是 oop设计有问题, 一般不是先做接口,再设计类,接口一般不太变化,类的实现大量变化很正常,如果接口一直在动,就有问题了把,只要接口不动,和接口相关的代码就独立开发就好了。。
abcfyk
2015-05-04 14:50:28 +08:00
@whatisnew 这种我倒觉得其实设计阶段是应该要有预见到的。我和6L观点类似。接口设计应当满足未来一段时间需求(可能发生的)变化。接口内部方法设计只要做到松耦合,高内聚,我觉得程序的寿命会延长许多。

以PHP为例
interface CheckOut{
//...
public function getGoodsBySkuIdList($skuIdList);
public function validateGoodsIsSalable($goodsIdList);
public function checkOutMain(...);
}

class CheckOut implements CheckOut{
public function getGoodsBySkuIdList($skuIdList){
//...
}
public function validateGoodsIsSalable($goodsIdList){//...}
public function checkOutMain(...){//...}
}

PS: PHP是世界上最好的语言。 :)
bdnet
2015-05-05 00:30:29 +08:00
没有银弹,主要还是看需求吧,如果这个需求每天都可以拍脑袋就改了,那么怎么设计都没用吧。。。这时候还是先画草图,明确核心业务逻辑才能进入具体设计和coding。这就是软件开发流程啊,不管是传统开发流程,还是 XP 都需要划清个个边界,将需求变更控制在一个范围内。不要忘了软件最擅长做的是有规律的可重复的事情,这一过程也就所谓的信息化。
cb269267
2015-05-06 15:31:48 +08:00
多健壮的代码都不可能从一而终始终不变,现在的快速迭代模式下,程序得不到良好设计的根本原因是都是谓的pm(product manager)和各种所谓的拍板人事,他们只会纸上谈兵,天天分析趋势,各种我觉得我认为的需求,project manager的能力才软件产品负责人必需的,否则你的产品火了起来,却持续不下去,经不起几轮需求变更就耦合得无法进行修改了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/188159

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX