我是一名初级开发人员(约3年经验),在我的工作中,我们正在设计一个新系统。我的首席开发人员将是首席架构师,但是他向我提出挑战,要求我自己(并行)架构系统。
在反复集思广益的想法并提出我认为是架构建议的过程中,我的领导给了我反馈,我所做的大部分工作都是“设计”而不是“架构”。
他将差异描述为架构与实现无关,而设计是对实现的描述。他说我需要脱下设计师的帽子,戴上建筑师的帽子。他给了我一些建议,但我也想问你:
如何摆脱软件设计师模式,开始像架构师那样思考?
以下是我提出的一些“设计” 示例,这些示例被我的领导认为与架构无关:
- 我想出了一种用于从系统中加载和卸载资源的算法,我的负责人说算法绝对不是体系结构。
- 我想出了系统应该引发的一系列事件以及应该以什么顺序引发它们,但是这似乎也没有将其视为架构。
我似乎陷入了细节之中,没有退后一步。我发现,即使我提出的是体系结构级别的内容,我也经常通过尝试各种实现并仔细研究细节,然后进行概括和抽象来达到目标。当我向我的领导描述时,他说我采用了错误的方法:我需要思考的是“自上而下”而不是“自下而上”。
这里是有关该项目的一些更具体的细节:
- 我们正在设计的项目是一个Web应用程序。
- 我估计大约有10到10万行代码。
- 我们是一家初创公司。我们的工程团队大约3-5人。
- 我可以将应用程序与之最接近的是轻量级CMS。它具有类似的复杂性,并且主要处理组件的加载和卸载,布局管理以及插件样式的模块。
- 该应用程序是ajax-y。用户一次下载客户端,然后根据需要从服务器请求数据。
- 我们将使用MVC模式。
- 该应用程序将具有身份验证。
- 我们不是很在意旧的浏览器支持(哇!),因此我们希望利用现有的最新和最大的支持。(HTML5,CSS3,WebGL ?、媒体源扩展等等!)
这是该项目的一些目标:
- 应用程序需要扩展。在不久的将来,我们的用户数量将达到数百至数千,但我们正在计划数以万计至数百万甚至更多。
- 我们希望该应用程序永远存在。这不是临时解决方案。(实际上,我们已经有了一个临时的解决方案,而我们正在设计的是长期替代现有的解决方案)。
- 该应用程序应该安全,因为它可能与敏感的个人信息联系在一起。
- 应用程序必须稳定。(理想情况下,它在gmail级别左右是稳定的,但不必在火星漫游者的极端位置。)