架构产生的动力主要源自以下几个方面:
自动化程度有限:对于需要人工干预才能完成的工作,即使存在一定程度的自动化,仍需要架构来协助规划和设计。
个体能力和专注度有限:每个人都有自己擅长的领域,但由于个人能力和专注度的限制,单个人很难完成复杂系统的设计和实施。因此,需要将工作分解并委托给不同擅长领域的角色,以提高效率。
时间限制:由于时间的有限性,为了缩短完成工作所需的时间,需要将任务分配给多个人合作完成,从而加快项目进展。
对系统要求的提高:随着对目标系统功能和质量的不断提高,需要更多的专业人士参与,这也促使了架构的涉及。
复杂性要求多人合作:当目标系统的复杂性超出了单个人的能力范围,需要多人合作来完成,以满足时间和技术要求。
这些因素共同推动了架构的产生,使得针对复杂系统的规划和设计成为必要。
架构是指根据需要解决的问题,对目标系统的范围进行界定,并按照特定原则对系统进行划分。这种划分要便于不同角色对各部分同时或顺序开展工作,通常并行工作可以减少时间。随后,需要建立有效的沟通机制来协调这些划分出来的部分。最终,通过这些部分之间的有机联系和组装,完成整个系统的所有工作,使其成为一个完整的整体。
在这种情况下,"相"并不是指特定的实体,比如一个瓷杯,而是指这个实体所具有的特定功能或作用,例如方便握持、敞口并且内部可容纳物品。因此,"相"实际上代表的是这个作用,而不是具体的某个物品。这也解释了为什么当我们从电视上看到一个人拿着一个东西时,我们能够理解那是一个杯子,即使我们只是看到光影。因此,名字实际上是用来标识这个作用的,以便进行交流。
根据架构的定义,要在架构设计方面取得成功,首先需要具备正确理解概念的能力,并能够发现这些概念背后所代表的问题。只有这样才能认识目标领域需要解决的问题,为做好架构奠定基础。实际上,这种能力在任何领域都是适用的。比如,如果我们想学习一项新技术,如Hibernate、Spring、PhotoShop、WWW、Internet等,了解这些概念涉及的问题,就能更快地掌握这些新的技术或概念;同样,也可以更快速有效地学习一个新的领域。利用这些概念来解释问题,甚至创造新的概念也会变得更加容易。强调这一点的原因在于,进行架构设计时,很多情况下都需要在一个新的领域解决问题,必须迅速深入并掌握这个领域,然后才能正确解决问题。
我们处理问题的时候,都会犯的错误:被告知要处理一个问题,但是交过来的实际上是一个解决方案,不是问题本身。被告知要处理一个问题,直接通过直觉就有了一个解决方案,马上考虑解决方案如何落地,或者有几种解决方案,选哪个合适当我们处理问题的时候,如果发现自己正在致力于把自己的工作完成,要马上警惕起来,因为这样下去会演变成没有 ownership 的工作态度。在面对概念的时候,也会不求甚解,最终会导致没有真正的理解概念。
要正确的认识问题,需要问两个问题:这是谁的问题?有什么问题?
我们要非常的清楚,所有的切分调整,都是对相关人的利益的调整。当人们认识到要主动的去切分一个系统的时候,毫无疑问,我们不能忘掉利益这个原动力。所有的切分决策都不能够违背这一点,这是大方向。
切分的原则主要包括以下几点:
连续时间内发生的活动不应被切分。例如,孕妇怀孕这一连续活动就不能被切分为十个人每月完成一部分。
切分出来的部分的负责人在权利和义务上必须是对等的。举例来说,孕育过程中,母亲有权利决定孩子的出生和抚养,同时也承担相应的责任。若权利和义务不对等,将损害各方利益,导致执行效率低下,实际上也会损害整体利益,违背了提升整体利益的初衷。
切分出来的部分不应超出单个个体的负荷能力。鉴于每个人的实际能力及负载不同,需要根据情况不断调整,即运营管理。
切分是内部活动,对整个系统的外部应该是透明的。如果切分导致整个系统解决问题的范围发生变化,这种变化并非架构设计所涉及的活动。然而,当问题得到清晰分析时,整个系统的边界可能得以进一步完善,形成螺旋式的进化。但这并不属于架构设计应处理的问题。系统的进化会引起新的架构切分。