客户端的结构设计

原始面貌

ghost1

控制引用,直接操作目标对象实例

  • 玩家和其他的Entity对象接口不统一
  • 差异化的具体实现和表现
  • 代码分散,逻辑定位繁琐

改变之一:拆分

拆分代码,拆分逻辑

  • 代码可维护,可理解
  • 单个脚本代码量少,逻辑分类

改变之二:合并

拆分代码,拆分逻辑,统一

  • 合并分类
  • 不断提取接口,合并接口
    原始Ghost模式

改变之三:整理

整理代码,管理代码,优化结构,扩展逻辑(包括热更)

  • 合并分类
  • 不断提取接口,合并接口
    Ghost3

设计要点

扩展

大部分模块都会有需求变更,尽量不动老的代码,所以需要扩展

  • 业务逻辑
  • 热更新

扩展的优点

  • 逻辑简化,分布成很多个逻辑单元
  • 逻辑分层,底层和上层逻辑分离
  • 结构分离,使可能热更新

扩展的缺点

  • 逻辑分散
  • 适用范围有限制,需要有共性
  • 一味追求扩展可能会带来效率问题

结构化

  • 数据和逻辑分离
  • 行为和状态分离
  • 功能和功能独立

一些思想

控制反转(Inversion of Control)

控制反转就是将创建实例化的权利从上层模块转移

依赖倒置(Dependency Inversion Principle)

  • 上层模块不应该依赖于下层模块,它们共同依赖于一个抽象
  • 抽象不能依赖于具象,具象依赖于抽象
// ghost相关接口,例如attack
Ghost.Attack();
Ghost.SetState();
Ghost.SetName();

依赖注入(Dependency Injection)

例如GhostExtFacade
注入热更

再比如SkillControl

// 依赖对象的创建获得被反转
// 同样是一个工厂
SkillControl.UseSkill(Ghost, SkillId)

了解客户端

客户端热更

结构细分

Ghost(Entity)

  • 组件
  • 接口
  • 扩展
  • 数据
  • 行为
  • 状态(数据)

扩展

  • 场景扩展
  • 实体扩展
  • 界面扩展
  • 消息扩展

热更

  • C#热更新
  • Lua热更新

界面

  • 界面数据
  • 界面表现
  • 界面扩展

其他

  • 行为队列
  • AI系统

    • 任务
    • 挂机
    • 寻路
  • 战斗系统
  • 开发调试
  • Lua加载机制
  • 事件系统