软件设计听课笔记

僵化的设计
设计无法响应需求和外部环境的变化,一有改变,就需要推翻重来。
在代码中写死要读取的文件路径。
UI控件直接设定底层数据源的字段名。
数据库表要加一个新的字段,结果导致N处地方需要更改。

脆弱的设计
不敢对软件进行改动
进行一个小的改动,其他地方就出错,甚至整个系统奔溃

无法重用的设计
系统中包容了对其他系统有用的部分,但是要把这些系统从系统中分离出来,却非常困难。

过于复杂的设计
完成一件事情有N种方式,选择复杂的那种。
明明可以用python写个小程序就能解决的问题,用C++来写..
需要保存一些数据到数据库的一个表中,使用Entity Framework这种重量级的框架…
想得过多,过度设计
为了未来可能发生的变化,我先写一些可以应付这些变化的代码…
要实现某功能,有一个XX模式正好用上,就用它来套用吧…

软件系统设计指导性原则
重用前人的设计经验
在长期的大量的软件开发实践中,人们不断总结经验教训,得出了一些通用的设计原则。
认真学习与领会这些设计原则,并灵活地应用于开发实践中,不再走前人走过的弯路,是成功构建一个满足需求的软件系统的有效途径。

DRY原则
Don’t Repeat Yourself!
典型场景:在程序中,需要记录下当前程序运行的状况,通常是使用日记系统来实现的。

private void LogMessage( string message){
    MyLogger loger = new MyLogger();
    loger.Write(message);
}
在项目中,不少地方都需要使用日记功能,于是就copy&paste很多次。
突然,某天发现了代码中的bug,发现代码只创建了对象,却忘记要释放它。
修改掉:
private void LogMessage( string message){
    MyLogger loger = new MyLogger();
    loger.Write(message);
    loger.Dispose();
}
由于之前到处copy&paste,所以现在修改时,也要讲每一处修改过来,万一遗忘掉几处,就在程序中留下了bug。
该怎么做?
当你发现在程序中有多个地方都需要实现同一个功能时,将此功能代码抽取为独立的可重用的组件,不要到处copy....

YAGNI原则
You Ain’t Gonna Need It.绝不要画蛇添足
在开发一个软件系统时,仅实现必需的功能,而不要凭自己的想象去实现一堆其实客户并不需要的功能。
用最简单的方法,仅仅只实现你所需要的功能。
在确实需要时,才进行抽象和封装。
不要想象用户会需要什么,自作主张地在系统中添加新功能。
在设计和开发时,确实需要考虑长远些,不能脚踏西瓜皮,但这并不意味着我们必须马上实现这些功能,只要做好准备,让系统支持演化与重构即可。

KISS原则
Keep It Simple,Stupid。简单即美。
不要过度设计,在满足需求的前提下,采用的软件设计方案越简单越好。

DDIY
Don’t Do It Yourself不要一切自己动手。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值