何谓架构
一种方案,用于解决问题。
如何衡量架构好坏
承载力
程序意义:承载足够多的逻辑系统,多少人共同工作
结果:访问量……
可扩展度
在添加新内容时,尽可能少地影响其他内容。
易用性
决定了效率。
可伸缩性
可以方便地移除不需要的功能。
既能适应大项目,也能适应快速迭代。
容错力、错误的感知力
出现错误时,能否保持运行不崩溃。
能及时记录错误信息,为解决错误提供足够的准确的依据。
思维方式
最重要的能力:抽象能力。
- 帮助我们在还未形成任何可见可想的实际目标前,描绘出大致轮廓。
抽象能力的强弱直接决定我们所能解决问题的复杂度和规模。
步骤:搭积木
- 在大脑中形成抽象概念
- 子模块分解
确认子模块间的沟通方式
依次实现各子模块
将子模块拼装组合
具体思维
分层
用于应对和管理复杂性
清晰描述由多少层面的事务待解决,解决层级的先后次序是什么。
将整个复杂系统划分为若干层次,各层专注解决某领域问题,向上提供服务。也可有纵向的贯穿其他横向层次的层:共享层。
分治
用于应对和管理复杂性
步骤
- 分解:“大”不断化“小”,直到“小”可以直接解决。
- 组合:将“小”的解组合拼装,最终得到“大”的解。
演化
有生命力的系统能不断环境变化。
具体构建
用分层思维确定架构层级
- UI
- 逻辑
编辑器
角色行为
AI
地图场景、寻路
Shader等效果
平台 - 资源
AssetBundle
prefab - 数据
内存
外部 - 网络
用分治法进行模块的细致化构建
数据表
- XLS导为二进制还是json还是什么:定义读取和解析接口
UI
- 界面基类
- 界面管理
- 输入事件封装
- 自定义通用组件基类
自定义各类具体的通用组件
外部资源
- 是否用AssetBundle
- AssetBundle
资源分类
资源间依赖
加载与释放
加密
AI
- 状态机还是行为树还是其他
- 接口实现
- 可视化工具
- 扩展接口
地图
- 2D还是3D
- 场景编辑器结构
- 是否需合并Mesh
- 区别对待场景内的大小物件
- 大地形如何逐步显示
- 是否要划分区块
寻路
- 使用什么算法(A*……)
- 地图数据管理
常用库
- 时间
- 数学
- 数字变量加密封装
- 坐标转换
- Debug调试
- 各逻辑系统通用工具
角色行为
- 移动
- 摄像机碰撞检测
- 动画特效编辑器
- 技能编辑器
- 行为流建立
2D动画
- 封装动画组件
- 明确制作流程
- 合并图集
实际在对各模块逐个攻破时,不断根据实际情况进行改善。
要及时整理和记录架构构建过程:方便后续查验时记起当初这么做的原因(主要要记的是这个)。
网友评论