在现实中,我们会发现很多从业人员对软件架构的认知有着明显的局限和偏差,具体体现在以下几点。
误区一:不知道架构与设计的区别
虽然许多从业人员的头衔为“架构师”,但是他们并不能回答下面一些问题:
☆系统架构与设计有区别吗?区别在哪里?
☆什么样的人能满足系统架构师的要求?
☆什么样的人能满足设计人员的要求?
一般地,架构师都是技术出身,他们可能长期从事过编码、设计领域的工作。很自然,他们可能认为设计、编码工作就是软件架构的一切。但是真正的构架师必须有长期的工作经验,并在系统化的提升之后才可能成为合格的构架师。他们需要考虑商业概念、商业运作、系统结构、结构优化等这些更为宏观的方面,然后选择那些最经典的实践参考模型,才能构建出合格的的软架构。
误区二:不知道系统架构该如何做
让我们回到日常的软件系统活动中来。其实通过一些实践,我们已经逐步建立起一些对软件架构及设计活动的认知。直觉和经验告诉我们,一个软件系统或软件架构在构建之处就给架构师留下充分的创作空间。但是,一个单纯为了一系列功能的实现而构建的架构,还不能称作严格意义上的软件架构。一个真正意义上的软件架构,是需要考虑如下的一些系统要求:
☆好的系统,一定是一个架构灵活的系统。
☆我们需要一个方便维护的系统来满足可维护性的要求。
☆架构设计人员能够确定当运行系统的下一个时刻的状态。
☆最大峰值时,系统还能保持运行,系统性能不会明显降低。
☆我们的系统能够与其他系统进行集成。但是许多架构师并不知道在系统架构构建时期,他们应该完整考虑
哪些因素,应该采用怎样的手段,应该完成什么任务,才能构建出一个久经考验的系统架构。
误区三:只盲目追随业界通用框架
事实上,我们在工作中,也许还会听到这样一些声音:
☆我们要解决一个分布式的问题,CORBA很好而且还很标准化,用这个架构就行了。
☆我们要做一个电子政务的应用,J2EE框架不就很流行嘛,就选这个架构吧。
☆我们要做一个车载系统平台,OSGI就是一个好的嵌入式平台,就用它吧。
上述只不过是我们经常能见到的一种对框架或中间件的依赖现象。如果我们每开发一个应用或产品,都要自己手工设计一个框架,的确是一件令人痛苦的事。当然,我们承认现在有很多产品化的、很成熟的框架或中间件,的确极大方便了我们的应用及产品开发。这似乎给人们一种错觉,以为应用和产品开发是一件很容易的事。但是,我们也要清醒的认识到这些框架或中间件背后实际上隐藏着很多技术、设计、应用场景,也就是说为设计开发人员隐藏了很多系统设计开发的复杂性。于是当产品开发或项目结束时,你就可能听到这样的抱怨:
☆我们应用CORBA架构系统在运行时速度很慢,而且很复杂,出了问题却不知道症结在那里。
☆我们的2JEE架构让我们使用了大量的EJB和JAVA和JAVABEAN,简单就是构件的海洋太难维护了。
☆我们的车载电子系统根本就不工作,打开汽车车门,插入车钥匙,点火,需要等上几十秒,电子系统都没反应。
所以系统架构并不是简单地应用一个流行的、通用地、看似很唬人的某某通用框架,从而使自己的系统过分地依赖流行的框架或中间件,同时把所有的系统级质量要求统统扔给这些框架或中间件,以寄希望于这些通用框架代替你去思考和处理你应该解决的问题。实际上,我们应该寄希望于自己来构建系统架构,使其能够做到:
☆即便是最大峰值运行时,系统也要有很好的性能。
☆当系统面对大量并发事件时,能够很好的进行调度和并行处理。
☆当系统资源使用频繁且负荷增加时,系统能够很好协调资源的运用。
☆当我们设计的重要实时系统(例如航空管制系统)出现错误时,能快速实现系统的自我恢复。
这些都是软件架构及设计人员自己应该动手解决的问题。引用FrederickP在1986年《No Silver Bullets》一文中说过的一句经典明言"Silver bullets do not exist",即"世上没有万能的解药"。Frank Buschmann也曾经说过"Any framework or middleware can only help you in doing your job,but it cannot do your job for you",即“框架或中间件是用来帮助你的,而不是代替你去思考和工作的”。所以我们必须根据现实的系统要求(功能和非功能要求),自己去构建适合现状的软件架构!
分享到:
相关推荐
这些课件共同构建了一个坚实的学习平台,使学员们能够深入理解软件架构的精髓,提高自身的专业技能,为成为一位合格的架构师打下坚实的基础。通过系统学习,学员们不仅能够掌握理论知识,更重要的是能够将理论与实践...
2.1 软件架构师的定义、分类和职责 2.2 软件架构师具备的素质 2.3 架构师与职能经理 2.4 架构师与开发人员 第3章 工作中的架构师 3.1 解决商业问题 3.2 解决架构问题 3.3 解决设计问题 3.4 ...
在IT行业中,架构师的角色至关重要,他们负责设计和指导软件系统的整体构造,确保系统的稳定、可扩展性和可维护性。以下是对这些知识点的详细说明: 1. **面向对象编程(OOP)**: 面向对象是现代编程语言的核心...
### 系统分析与设计(高级软件架构师)——关键知识点概述 #### 一、基础知识与思维模式 **1.1 软件工程学的思维方式** - **基础概念**: 强调通过科学的方法来组织和管理软件开发过程,确保高质量、高效率地完成软件...
本文将深入探讨“软件架构之道”,解析架构思维、架构的本质、思维方法、常见误区、核心理念以及修炼方法,以期帮助读者更好地理解和实践软件架构。 首先,我们需要了解什么是“架构思维”。架构思维是一种高层次的...
### 系统架构师基础到企业应用架构 #### 一、引言 本文旨在深入探讨系统架构中的表现层设计及其重要性。系统架构是软件工程中的核心组成部分,它定义了软件系统的结构、行为以及属性。其中表现层作为用户与系统的...
在信息技术高速发展的今天,软件设计师作为软件工程领域的专业人才,承担着软件系统设计与开发的重要职责。为了顺利获得这一专业资格认证,备考者们往往需要大量的学习资源和高效的学习方法。《2023软考软件设计师...
常见误解包括将系统架构等同于系统设计、基础结构或硬件组合,认为好的架构仅依赖于单个架构师,或者认为架构是可以独立于软件架构之外的。实际上,架构是多方面的,涉及多个层面的决策,需要团队协作,且可以通过...
软件架构设计可以理解为一系列层次化的决策过程,这涉及功能和展现的决策、技术架构的决策等。在做架构设计时,架构师需要根据实际需求决定是自主研发还是使用商业软件、开源软件,从而做出最合适的决策。正确的决策...
首先,从软件工程的角度,系统架构设计师需要了解软件开发的生命周期,包括需求分析、系统设计、编码、测试和维护等阶段。在设计阶段,他们要运用模块化、分层、面向服务(SOA)等设计原则,确保系统的可扩展性和可...
7. 软件设计与体系结构:了解软件设计原则、模式,以及系统架构设计。 每一份真题的解析部分都是学习的关键,它能帮助考生理解正确答案的原因,发现自己的思维误区,提高解题能力。同时,通过对比不同年份的试题,...
案例分析考察的是系统架构师如何在实际场景中应用理论知识,如分布式系统设计、数据存储策略、性能优化等。解析中将详细解读每个案例的背景、问题所在、解决方案以及选择该方案的理由,帮助考生理解和掌握在实际工作...
软件设计师是中国计算机技术资格考试(简称“软考”)中的一项专业认证,旨在评估和验证个人在软件设计领域的专业知识和技能。这个压缩包文件包含了从2005年至2013年的历年真题及答案解释,对于备考者来说是一份宝贵...
在Java开发领域,即使是经验丰富的开发者和架构师也可能会陷入一些常见的误区,这些错误可能导致代码质量下降、系统性能瓶颈或维护成本增加。本篇文章将针对这些常见错误进行深入探讨,帮助Java专业人士避免重蹈覆辙...
2008年的试题分为上午和下午两部分,上午试题主要考察了软件工程的基本概念、模型和方法,如敏捷开发、面向服务的架构(SOA)等现代软件开发理念。下午试题则更多地侧重于实践应用,例如软件安全评估、软件故障诊断...
教材内容不仅包括软件生命周期的每一个阶段,也涉及了软件项目管理、质量保证、软件工程标准和规范等,为考生提供了全面的知识体系架构。考生在备考过程中,应当以这本教材为学习基础,全面理解书中所涵盖的每一个...
【描述】"2009年上半年软件设计师下午试题试题解析"说明了这份资料不仅包含了试题的答案,还可能包括了对每道试题的详细解析,可能是解题思路、关键知识点的讲解以及可能的陷阱和误区分析。这样的解析对于考生来说...
"高级软件需求分析师培训讲义"深入探讨了如何从不同视角理解和处理软件需求,避免常见误区,并提出了需求工程的组织与实施要点。 首先,CMMI(Capability Maturity Model Integration,能力成熟度模型集成)将需求...