谈谈软件架构之美

引言: 软件架构就是在准确把控需求的基础上对系统的解剖。

          而准确把控需求,不仅仅体现把控现有的需求,而且还要考虑到需求(可能)变化的部分。为程序的可延展性充分考虑。我将从几个方面进行展开:

(1)“万物皆可对象”。

         面向对象方法学的出发点和基本原则是尽可能模拟人类习惯的思维方式,分析、设计和实现一个软件的方法和过程,尽可能接近于人类认识世界解决问题的方法和过程。

         软件系统是由对象组成的;把对象划分成类,每个对象类都定义一组数据和方法;对象彼此之间仅能通过传递消息互相联系;层次结构的继承。

(2) 类的提取

       曾经刚接触面向对象编程时,就是从实现程序功能的角度去设计的,是自底向上的(一开始就考虑细节),企图从底层实现程序这样的出发点来达到满足现实世界的软件需求的目标。但现在看来,这样的思维方法是不适用于面向对象的编程语言的。如果仅仅需要用封装模块的思想实现,那么这种则是面向过程的思想了。

        面向对象的精髓在于考虑问题的思路是从现实世界的人类思维习惯出发的。不要一上来就去想程序代码的实现,应该抛开具体编程语言的束缚,集中精力分析我们要实现的软件的业务逻辑,分析软件的业务流程,思考应该如何去描述和实现软件的业务。毕竟软件只是一个载体,业务才是我们真正要实现的目标。

        面向对象的思想是“自上而下、逐步细化”的,符合人类的思维习惯。先不考虑问题解决的细节,把问题的最主要的方面抽象成为一个简单的框架。集中精力思考如何解决主要矛盾,在解决问题的过程中,把问题的细节分割成一个一个小问题,再专门去解决细节问题。

(3)封装

        指隐藏对象的属性和实现细节,仅仅对外公开接口。例如:我需要做一个四则运算,对外开放四个接口,用户只需传入相应的参数,然后就会返回正确结果。从整体上看,可以不用关注内部实现,通过某些途径可以完成调用者的需求即可。

        封装会带来一些好处:数据安全,例如类就是对象的一个封装,实现属性行为一体化。

(4)子系统的建立

1. 通过职责划分分离关注点。达到“系统中一部分变化了,而不会影响其他部分的改变”。子系统应该具有高内聚性,在我看来,高内聚是低耦合的基础。

2. 根据不同粒度级别分离关注点。先考虑粒度较大的子系统,其次再考虑更小粒度的子系统或类。先从软件高层进行思考,前期避免陷入过多的细节中。自顶向下,逐步细化。

3. 根据通用性分离关注点。不同的通用程度意味着变化的可能性不同。

(5)关于设计模式

        面向对象的特点是可维护可复用可扩展灵活性好,设计模式的好处在于:随着业务变得越来越复杂,面向对象依然能够使得程序结构良好,而面向过程却会导致程序越来越臃肿。因此,当我们在面临设计较复杂的系统时,考虑到程序的类的层次结构变得更加可维护性、可扩展性。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务