软件架构及几种典型框架

本文探讨了软件架构和框架的区别,强调了架构在大型系统中的重要性,指出框架的核心是抽象,旨在简化复杂性。文章通过建筑隐喻阐述了软件设计的层次,列举了不同类型的框架,并以Android Framework为例,展示了框架如何简化开发。此外,还探讨了框架的实现、消息处理和架构研究方法,强调模仿优秀框架以提升设计能力。
摘要由CSDN通过智能技术生成

    什么是软件架构?什么是软件框架?很多时候,我们常常会混用架构和框架这两个词。实际上,广义上的架构和框架在概念上有很大的不同,架构给人的感觉,包容上更大,所以实际上架构是包含了框架的概念的。广义的架构应为一个系统的架构,不仅仅涉及软件中的技巧,更有系统的观念与视角在其中;不仅要考虑代码的因素,更要布局非代码的因素;不仅仅有技术的内容,更有管理的内容在其中。而为了便于讨论,这里的架构很多时候是指狭义上的纯技术上的架构,我们根据表达需要,将其与框架混用。

   就单纯的框架而言,其核心是抽象。抽象就是统一建模的过程。语言的最高境界应该就是高度的抽象。就比如,单说树木我们认为是一种抽象,而具体言及柏树、杨树、松树、银杏等,则是一种具体化。这种抽象会剥离出这类事物共性的东西。比如对树木而言,有树根、树干、树枝、树叶这些特征。对一个从来没有接受过训练的小孩子,画一个具有上述特征的树,他也能告诉你,这是一棵树。这就是抽象的威力。对语言、对程序设计,也需要这种对现实的、非现实的事物进行抽象,找到共同点,构建出统一完成体。这里,我们提到了非现实事物,举个例子,Android应用程序组件就是对APP的一种抽象,并统一抽象为Activity来与用户交互;而对Apple的IOS而言,则有另一种抽象。二者都是对非现实事物的抽象描述,虽有不同,但都是探索与人类交互的APP的共同特征。抽象带来的最大好处就是对变化的应对能力,达到以不变应万变的效果。

   一,框架本身很复杂,但是却是用来将复杂的东西简单化

   软件设计,到了变大,变复杂的时候,框架或者架构,就是重要的一块了。一个小测试程序,谈不上郑重其事的架构。但是,一旦成为一个大系统,那么架构或者框架就是重中之重了。这时架构设计上的差异,可能会导致截然不同的结果。好的架构,系统稳定灵活,可扩展性强,开发、运行效率高,生命周期长。相反,不好的架构,可能系统还没有设计出来,就因为中途暴露的各种坑而提前夭折。即便磕磕绊绊走到交付,也可能因为难以维护而使得生命周期大打折扣。

   理解大型软件的设计思想:

   软件的设计为软件的核心。写一个小程序跟设计一个大型系统区别在于何处?我们可以通过类比来说明。比如构建房屋,最简单的搭建一个犬舍,只需要几块木板加图钉(例子来源于代码大全)就可以完成。如果搭建的不好看,完全可以拆了重来,如果选的位置不好,也可以拆了重来。建一座房子,就有一点不同了,需要提前想一想该怎么弄。搭建犬舍时不需要图纸,只需要埋头干就行了。而建房子就不能这样,不但要仔细想一想,而且想好了可能还需要简单设计一下,画个图,实地丈量丈量,等等如此一番。完了还需要准备材料,石头沙子,水泥,砖块,钢筋等等,准备好材料后,就可以施工了。需要打个地基,一米深就够了吧,需要一些测量水平和垂直的工具。盖房屋已经不允许拆了重来了。再进一步,我们来看看设计高楼大厦。这就不是一个人可以完成的了,需要多人协作,进行精心完整的设计,并输出规范的图纸作为大家形成共识的基础。地基也不是简单的弄一下就行,要几米,怎么布局,都需要严格的计算和测量。各种施工工具需要具备,才能开始建造。软件设计也是类似,如果只是写一个测试小程序,完全不必要讲究命名,书写,功能有就可以了,当然可以写的好看点,有一个好看的犬舍还是给人不一样的感觉。再往后,大点的设计一个模块,或者一个具有一定功能的程序,有完整的操作界面,那么就需要简单的设计一下了。另外可能还需要一些脚本等其他语言协助。也许一个人也是可以完全完成的。再大点,一个大型的软件或者系统,情况就大不一样了。跟建设高楼大厦类似,需要进行详细的设计。接口要求,代码风格等等,都需要要求。每一个连接结构都必须是一致的,大家都可以拿来使用。一个功能模块,一个组件做什么用,需要具有什么样的要求,特点,接口等,都必须进行严格的设计,就像大楼的钢筋要用什么型号,做成什么形状等等,都需要按设计来。所有这些整合到一起,才能形成一个功能强大而又稳定的系统。此时的系统,也许就无法靠一个人来完成了。

   不过这个类比,或者说隐喻,还是有点问题的。因为软件设计跟建筑大厦还是有些不一样。盖楼,是一个实物,实实在在能够看到,很多东西做成什么样,通过图纸就能完全确定。软件设计则不太一样,是一个抽象的东西,纯粹存在于我们大脑的一个系统。而且软件设计面临的不仅是系统本身的问题,还有解决问题领域的限制,很多东西无法跟建筑施工那样复用。不过这里重点是要突出一个强大的软件系统需要精心的设计,在这一点上,将二者进行隐喻是恰当的。

   作为设计者而言,定然要有深厚功力。俗话说,也许每一个人都可以做一个好的欣赏家,评判家,但是,并非每一个人都能做一个好的创造者。也就是说,好东西容易看出来,但是不容易做出来。就像大楼,我可以住,可以看,可以评判,但是,要设计,就是另外一回事了。

   作为一个软件开发者,一个有一定经验的软件开发者,笔者常常在想,那些好用的、庞大的系统的设计者,是如何认识系统架构的?是如何想出来设计方案的?像操作系统,Office办公软件,集成开发环境Eclipse,Android手机等等,哪一个不是投入了大量的人力物力开发出来的?哪一个不是人类智慧的结晶,像艺术品一样的存在?也许世上诸多人,这辈子都注定只是望码兴叹的命。在本章最后,附有笔者对架构认识有感而发的思考过程记录。

   在《程序员的自我修养》这本书里,作者在序言部分提到了这么一段话:CPU体系结构、汇编、C语言(C++)和操

  • 36
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙赤子

你的小小鼓励助我翻山越岭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值