中文 | English
RocketDriver Pro 是一款基于Unity引擎的游戏开发框架
游戏项目有一些比较明显的特点:数据偶合度高、系统依赖性强。
所以整个游戏项目很容易就会演变成单体架构(monolithic software)。
随着系统模块越多,单体架构就会越复杂。加上新增功能与旧功能修改的交错进行,互相影响,最终难以管理。
为了解决或者减轻上述问题的影响,结合面向服务架构(SOA)的思想,这里提供了一个解决方案,并解决以下问题的:
执行时机:IArgumentService -> IAwakableService -> IInitService
调度顺序:OnServiceInjected > OnServiceAllInjected > OnServiceAwaked > OnServiceAllAwaked
调度顺序:OnServiceInitStart > OnServiceInited > OnServiceAllInited > OnServiceDataInitStart > OnServiceDataInited > OnServiceDataAllInited
在获取服务使用前,必须先注册到框架管理,然后初始化后才能使用。这是为了确保数据已经完整地处理完成。
通过调用 ServiceConfig 实例中的 AddConfig 函数,能把服务注册到框架管理中去。
ServiceConfig.Shared.AddConfig(new ServiceInfo(serviceName, serviceImpl, args));
建议:
通过调用 ServiceManager 实例中的 StartInitalization 函数,开始初始化。
注意:初始化开始后不应该重复调用。
在全部服务初始完成后,通过调用 ServiceConfig 中的 GetService 函数,可取得服务实例。
ServiceConfig中获取服务实例的函数有多个,但最终调用的都是GetService函数。
建议:
当游戏要实现软重启时,有必要重置全部的服务再重新初始化。
通过调用 ServiceManager 中的 ClearServices ,可实现全部服务的重置。
只有实现IClearService接口的服务才会执行重置逻辑。
建议:
JLGames/RocketDriver/Samples/Service
示例中的服务说明: