客户端开发—架构设计思考
2017-11-11 本文已影响12人
11e17ad00a2a
1.架构设计考虑哪些问题?
- 提供一套具备唯一性的完整方案(唯一性:业务唯一(贴合业务)、问题解决方案的唯一性(每种问题有多种解决方案,根据使用场景,上下文、限定唯一更合适的解决方案))
- 通过你的设计能力来减少工程的开发成本(测试的便利性、程序的低耦合、扩展性、可维护性)、降低工程的开发难度(主要是指封装)。
- 规避工程实施中可能会遇到的问题(技术问题和非技术问题,防止架构被腐蚀)
- 架构要能持续演化、演进
- 追求简约和极致
- 对业务工程师做最少的假设
- 对使用流程做最极致的简化
- 尽可能利用一切原生框架已经提供的手段,不要重复发明轮子
2.是否要套用现有方法论,具体该怎么做?
- 已有成熟方案:可以直接上成熟方案
- 没有成熟的方案:从demo开始,实现核心功能,并逐渐演进成组件化
3.接手新项目时,如何做架构调整?
- 先找问题,再动手
- 揣测现有架构的设计思路,新方案尽量不要动得很大
- 找到过渡方案
- 提供自动化工具(自动化codereview、自动化生成代码模版、自动化打包、自动化测试)
4.架构中的对称性
- 有if有else(问题处理的完整性)
- 有大有小(如:胖model、瘦model),有正有反(如:add操作对应remove操作),有集约有离散
- 有来有去(如:)
5.辩证对待架构的灵活和限制
- 灵活会引入混乱,造成架构腐蚀
- 限制会使程序代码方案统一有序
- 在架构改变的场景下保持灵活(业务转型、架构演进、团队人员变化的情况下,要保证架构能灵活handle),在方案实现的场景下保持限制(在同一种上下文环境里保持使用同一种方案)。
6.辩证对待多和少
- 不怕多,怕乱
- 用多换少(用多一些代码,换更少的bug率、更少的耦合、更少的便利的测试、更少的维护成本、更少的拓展成本等)
PS:模块化架构设计的核心思想是:分治思想