中文 | English

RocketDriver Pro

Logo

RocketDriver Pro 是一款基于Unity引擎的游戏开发框架


7. 服务框架(Service)

7.1 设计目的

游戏项目有一些比较明显的特点:数据偶合度高、系统依赖性强。
所以整个游戏项目很容易就会演变成单体架构(monolithic software)
随着系统模块越多,单体架构就会越复杂。加上新增功能与旧功能修改的交错进行,互相影响,最终难以管理。
为了解决或者减轻上述问题的影响,结合面向服务架构(SOA)的思想,这里提供了一个解决方案,并解决以下问题的:

7.2 设计思路

7.3 接口说明

7.3.1 服务基础

7.3.2 服务初始化相关

执行时机:IArgumentService -> IAwakableService -> IInitService

7.3.3 管理调度相关

7.3.4 事件说明

7.3.4.1 进度更新相关事件

image

7.3.4.2 服务准备相关事件

image
调度顺序:OnServiceInjected > OnServiceAllInjected > OnServiceAwaked > OnServiceAllAwaked

7.3.4.3 服务初始化相关事件

image
image
调度顺序:OnServiceInitStart > OnServiceInited > OnServiceAllInited > OnServiceDataInitStart > OnServiceDataInited > OnServiceDataAllInited

7.3.4.4 数据加载相关事件

image

7.3.4.5 数据保存相关事件

image

7.4 如何使用框架

在获取服务使用前,必须先注册到框架管理,然后初始化后才能使用。这是为了确保数据已经完整地处理完成。

7.4.1 把服务注册到框架管理

通过调用 ServiceConfig 实例中的 AddConfig 函数,能把服务注册到框架管理中去。
ServiceConfig.Shared.AddConfig(new ServiceInfo(serviceName, serviceImpl, args));
image
建议

  1. 使用一个专门处理注册服务的类管理注册逻辑。如示例中的ServiceRegister。
  2. 注册逻辑调用应该保证唯一。

7.4.2 服务初始化

通过调用 ServiceManager 实例中的 StartInitalization 函数,开始初始化。
注意:初始化开始后不应该重复调用。
image

7.4.3 服务调用

在全部服务初始完成后,通过调用 ServiceConfig 中的 GetService 函数,可取得服务实例。
ServiceConfig中获取服务实例的函数有多个,但最终调用的都是GetService函数。
image
建议

  1. 使用一个专门管理获取服务实例的类管理获取逻辑。如示例中的ServiceCenter。

7.4.4 服务清理

当游戏要实现软重启时,有必要重置全部的服务再重新初始化。
通过调用 ServiceManager 中的 ClearServices ,可实现全部服务的重置。
只有实现IClearService接口的服务才会执行重置逻辑。
image
image
建议

  1. 每个服务都建议实现IClearService接口。
  2. 在IClearService接口中的Clear函数中把事件监听也全部清除。

7.5 示例

JLGames/RocketDriver/Samples/Service
image
image
示例中的服务说明: