berryzhou

  在将近三年时间里开发维护我们公司的系统,总体来讲问题太多,问题多真的不一定是坏事,它能让你学的更多,总结很多经验,突然意识到系统设计是那么的

重要,下面我个人可能认为是比较重的东西跟大家分享一下。

 

  1. 设计系统时要对系统进行一步一步的抽象,需要从上至下的设计,或者说由高至低的设计,并且需要了解系统外部环境,跟那些系统打交道。系统之间是怎么通信,怎么交互的(这里的前提是已经充分的了解系统需求,也就是需求分析)。从而得到系统的第一个抽象图,例如我们公司的ERP整个系统布局图。

 

 

系统架构设计经验分享

 

 

 

系统设计画图是必要的一个步骤,毕竟图是比较直观的,相对于语言描述来讲。

 

有了第一个抽象图,我们就可以根据实际的应用去切系统,比如上面的图就可以切分成一个个的子系统,分布在不同的数据库中,当然如果你考虑到目前没有那么大的数据量,没有比要分成那么多的库,你现在不分是可以,但是设计的时候是需要考虑到将来如果有大数据量的时候,在不需要改系统,或是很小的改动,很快就能切分系统提升系统的性能,这是架构师的前瞻性。

当然你可能要问,数据依然还是那么多,IO没有变化,你可以看看上面的图,已经把系统的耦合度降到最低,虽然开发的成本是会高一些,但是系统扩展性,和维护性,都有很大的提高。比如将来系统的遇到大数据量,大并发量的时候,我们就可以考虑,把需要的部分做成分布式,比如上图的订单系统,网上下单量出现大并发时,我们就可以把产品系统做成分布是应用,之所以能做成分布式,就是因为系统模块,或是子系统的耦合度非常低,一个子系统出现故障,不影响另一个子系统,彼此之间是通过第三方一个稳定的接口进行交互。

 

1.需要有高内聚的设计,面向接口编程,面向服务编程。

我们设计系统模块或功能点时,就相当于设计系统的一个类一样,这个类就只能干他自己本身的只能,不能把跟他不想干的东西往上放,好处有很多,比如,扩展性,可维护性等等。

为什么要面向接口编程,接口是抽象的行为,是可以信赖的,为什么要面向服务编程,

这也是为了系统可维护性,当我们为客户端提供某项功能时,我们跟客户端只进行数据交换,客户端不需要知道,里面到底怎么执行的,这样做的好处是,当我们需要调整服务里面的逻辑时,对外提供的服务时稳定的。

 

2.设计系统一定要有抽象的能力,面向对象编程

比如设计一个模块的日志,我之前就碰到这样的需求,需要记录一个表中的其中的几个变化点,如果仅仅是满足这个需求非常简单,只需要记录这个字段的变化前后就可以,查询语句也比较简单,你要知道客户是善变的,随时都可能说增加一个记录点。

现在我们就来思考一下,怎么设计样的一个日志能?不考虑这个需求,就设计一个日志而已,我们需要记录写什么,日志就是跟写记述文一样,把时间,地点,人物,事件记录下来就可以了,日志需要真实的反应真实的情况,日志是不能修改,Ok日志功能我们清楚了,我们现在已编程的角度去思考,日志是一个抽象东西,日志就是日志,我只管实现我的日志功能,至于你实现A应用,还是B应用,是查询也好,还是判断逻辑也好,那是你的事情。前面的说的问题点在哪?问题就出在,是根据需求去设计日志,而不是根据需求去应用日志。

 

3.需要有系统设计的前瞻性。

设计一个优秀的系统,是跟一个设计人员是否具有系统的前瞻性有关系的,上面也说好多关于这方面的东西。

 

如需转载请注明本文出处:http://www.cf17.com/html/article/90.html ,谢谢。

 
http://www.cf17.com 中的技术文档中有我平时总结的一些经验,并在逐步更新中,也欢迎到这里来交流。

 

分类:

技术点:

相关文章: