什么是软件架构模式
计划启动未开发的软件项目?然后选择正确的架构模式将对项目的结果起关键作用。选择市场上最流行或最新的技术并不总是意味着会带来最好的结果。但是,选择最合适的解决方案将为行之有效的问题和反复出现的问题提供可靠的解决方案。
在软件工程领域,有一句著名的谚语说:“对您的简历做出决定”。这是什么意思?IT专业人员喜欢用最新,最先进的技术来装饰自己的简历,这将对他们的下一次面试有所帮助,但实际上对项目没有好处。例如,如果您的项目是为调查构建常规的数据捕获表单(不超过10个字段),并且少于100个用户只能使用一次,那么使用微服务等高度复杂的架构模式将是一场彻底的灾难。这就像建造一架战斗机只是为了逛街尽头的杂货店。
选择架构模式时必须进行彻底的计划,并且必须考虑以下功能。
成本
上市时间
用户数量(当前和将来)
隔离级别(即:与其他系统/平台集成)
如果我们开发没有任何架构模式的系统会怎样?最终将导致一个“大泥球”,每个阶层都与其他阶层相连。
一个大泥球
因此,只要您更改一个类的行为或结构,就会在其他多个类破裂的地方产生涟漪效应。您的软件是这样的吗?找出答案的最佳方法是使用软件设计逆向工程工具(如hex-ray)来分析您的组件/类结构。如果最终遇到上图所示的情况,那么就该重新考虑并对软件设计进行一些更改了。
为了帮助您,我们将浏览主要软件架构模式的基础知识,以及每种模式的优缺点。然后,我们将详细说明哪种架构模式最适合给定场景。但是我们需要牢记一件事。在软件体系结构方面,没有黑白答案。不存在正确或错误的体系结构。它是非常主观的,并且取决于前面提到的多种因素。
什么是软件架构模式?
创建软件系统基本结构的原则称为软件体系结构。软件结构由软件元素及其相互关系组成,这些元素起着蓝图的作用,规划了要执行的任务的模式。软件设计团队极大地依赖于这些软件架构模式。应当指出,必须明智地选择软件体系结构,因为一旦实施,就不容易更改。
软件架构模式很重要,因为它们是在架构设计中成功构建和测试的最佳解决方案的示例。有经验的开发人员会使用他们的知识和熟悉程度来包含这些模式,而不是在设计时人为或随机创建模式。此外,通过使用这些模式并突出显示它们,他们可以共享知识并教会新开发人员关键的设计策略。
软件架构模式的好处
模式有助于识别和指定抽象,这些抽象位于单个对象,类和组件的级别之上。单个应用程序本身很难解决一个复杂的问题。模式引入了具有多个应用程序组件的不同角色,从而有助于提供解决方案。他们定义了组成部分,以及他们在协作方式方面的职责和关系。
此外,这些解决方案描绘了所介绍角色之间的关系。例如,观察者模式包括两个主要角色,即主题和观察者。这两个角色通过基于推送的更改传播机制进行协作,该机制确保组件可以保持彼此一致的状态。
模式提供了一种通用语言和对设计概念的共同理解。即使某些算法,接口,实现和详细设计的重用并非总是可能的,这有助于简化架构知识和伪像的重用。例如,当开发人员了解Observer模式时,无需讨论如何管理其系统中一致的两个协作组件。
模式有助于记录软件体系结构。通过对后果和实现折衷的深入评估,模式可以追踪选择特定设计选择而不是其他选择的原因。通过记录软件的意图,行为和结构,可以发现其中的模式,从而使软件开发路径,实践和维护变得更加顺畅。产品线架构使用有益的模式,因此开发人员应该意识到这一点。如果没有,他们将在不了解基本结构,机制和控制流程的情况下,难以正确使用它。基于模式的体系结构文档通过帮助开发人员专注于主要设计决策来帮助解决冲突。
模式在具有明确定义的过程的软件构建中很有用。一些模式勾勒出特定的行为。这为满足特定领域中的应用程序的某些功能要求铺平了道路。例如,已记录了会计系统和公司财务以及提高响应系统容量的模式。
模式还可以以一种形式来捕获经验,这种形式可以独立于特定的项目细节和约束,实现范例甚至通常是编程语言。在理解编码原则并解决新项目中的设计挑战时,开发人员可以实施容易出错,效率低下或无法维护的解决方案。模式可帮助开发人员选择合适的软件体系结构,而不会陷入域中的潜在陷阱。
模式可以帮助来自不同编程语言文化的软件开发人员共享共同感兴趣的设计见解,同时还可以防止“语言大战”。在不同世代的开发人员之间进行知识转移有助于平衡并使各个社区的成员能够交流并重新关注特定语言社区的关注。尽管编码可能不同,但是可能会出现类似的模式,这些模式将支持新旧模式。
体系结构模式不是编码准则
必须注意,模式不能视为编码准则。可以将编码准则部分或从着重于代码样式的模式中放在一起。但是,事实并非如此。尽管有许多惯用的编码准则,但这不会自动使它们成为设计模式。例如,Sun Microsystem的JavaBeans规范一直将属性访问器的get和set前缀用作“设计模式”。但是,尽管这些前缀大多数都是模式,但即使在Java代码中,它们也无助于解决一般设计的设计问题。
建筑图案的应用
清楚地理解模式词汇总是很重要的,因为应用错误的模式会导致很多问题。有经验的开发人员将具有合理的判断力,这将有助于他理解在特定情况下何时不适合使用某种模式。如果应用不当,可能会导致不合适的设计和实现。
对模式有浅浅的了解可以给开发人员一种印象,即他们可能精通该模式,即使有更好的解决方案。一个很好的例子是了解复杂模式(例如Proactor和Reflection)的结构和参与者。这些知识仅仅是一个方面,因此还不够。对于有效的模式应用,重要的是模式的本质必须反映在其上下文中,而不仅仅是结构中。