作为软件开发者 我们设计的每一个软件都存在于现实生活中,所以一定会存在约束条件的 约束可以驱动 塑造和影响软件系统的架构 你工作的组织和环境都会给你强加一些约束 影响你的架构
1.时间和预算的约束
也就是时间和金钱 这两者我们都很熟悉 而且通常不够。。。
2.技术约束
通俗来说 也就是 你所能达到的技术 你肯定不可以接收一个你的技术达不到的项目 或者说某个功能你的技术达不到 你也不可能硬去实现 或者说你的团队已经规定了所要使用的技术 列出了技术清单 你便不可以在不申请的情况下使用其他的技术来实现功能
下面是一些常见的技术约束 :
1.批准的技术清单
许多大型组织在开发之前 都会列出一个可以使用的技术清单 如果你需要使用清单上没有的技术 就需要申请
2.现有系统的互操作性
会规定在整合已有系统的时候可以使用的协议和技术
3.目标部署平台
构建一个全新的系统是 目标部署平台是影响技术决策的主要因素之一
举个例子 每个平台提供的都不同 对于某些东西 比如本地磁盘操作 你的软件能做什么 不能做什么 能做的次数 每个平台都不同 所以这是一个技术约束
4.技术成熟度
有些组织喜欢采用有风险的尖端技术 而有些组织则比较保守
5.开放源代码
有些组织不喜欢用开源项目 而有些组织喜欢 这就产生了 可不可以使用开源项目 或者 开放源代码的技术约束
6.供应商关系
有些合作是在一些复杂的关系中产生的 所以有时候不得不被迫使用一些技术
比如一个老总请 你的负责人 喝酒 喝醉了 然后就达成了合作 让你们团队 使用这个老总的技术 这就长生了技术约束。。。
7.过去的失败
如果一个公司 以前使用过一个东西 而且失败了 那么他可能会不使用这个技术 这也产生了技术约束
8.内部知识产权
你的组织内部 已经有关于某项技术的知识产权 即使有更合适的技术 可能规定你只能使用这一技术。。。
3.人员约束
更常见的是,开发软件可用的技术和方法 受限于你的人员,比如
你的开发团队有多大 ?
他们有什么技能?
如果你的开发团队需要扩展,能有多快 ?
如果在交付之后,接手你的团队拥有和你的团队相同的技能吗?
4.组织约束
组织政治有时会阻止你实现真正想要的解决方案
约束并不一定都是不好的,一方面约束虽然能降低生产力,但是一定程度上,它也剔除了大量的潜在危险。
另外一点要记住,约束是可以划分优先级的,就是说有些优先级较高的约束需要严格遵守,但有时 为了保证优先级高的约束的成立也可以在协商成功的情况下放弃一些优先级低的约束
比如说 一个软件主要约束是 一些技术清单和时间约束 那我们在与对方交流的时候 如果时间约束重要的多 我们可以在确保规定时间内完成的情况下 使用一些技术清单上 没有的技术(当然是在对方同意的情况下) 约束有时候也需要相互权衡
作为一个架构师,找出并了解为什么会有这些约束是你的责任,它们可以帮助你架构你的软件,做不好这些事情,无视一些约束,搞不好会出大事。。。