中文 | 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
示例中的服务说明: