13. Architecture 的好处

不管是 System、Model 还是 Utility,都会注册到 Architecture 中。

伪代码如下:

namespace QFramework.PointGame
{
    public class PointGame : Architecture<PointGame>
    {
        protected override void Init()
        {
            RegisterSystem<IScoreSystem>(new ScoreSystem());
            RegisterSystem<ICountDownSystem>(new CountDownSystem());
            RegisterSystem<IAchievementSystem>(new AchievementSystem());

            RegisterModel<IGameModel>(new GameModel());

            RegisterUtility<IStorage>(new PlayerPrefsStorage());
        }
    }
}

大家可能会问,如果一个项目有非常多的 System、Model、Utility 全部注册到 Architecture,这样 Architecture 的代码量就变多了,会不会让项目变得难以管理?

答案是不会,Architecture 注册的模块越多,这套架构发挥的作用就越大。

因为 Architecture 本身就能很好地展示项目的结构,可以把 Architecture 本身当做一个架构图。

比如以上伪代码对应的架构图如下:

非常清晰。

而伪代码中只有 5 个注册模块,是非常少见的,一般情况下,项目都会注册十几个甚至几十个模块,也有上百个模块的时候。

而如果这些模块没有用 QFramework 而全部使用单例实现的话,项目就会变得很混乱。

而使用了 QFramework,我们就可以在 Architecture 中统一集中管理这些模块,是方便项目管理的。

这就是使用 Architecture 的优势。

这里,再贴出一下笔者曾经写的项目的 Architecture,代码如下:

using IndieGame.Models;
using IndieGame.Utility;
using QFramework;
using UnityEngine;
using UTGM;

namespace IndieGame
{
    public class LiangxiesGame : Architecture<LiangxiesGame>
    {
        public static bool IsTestMode = true;

        public static void SetTestMode(bool testMode)
        {
            IsTestMode = testMode;
        }

        protected override void Init()
        {
            RegisterSystem<ISaveSystem>(new SaveSystem());
            RegisterSystem<IInputSystem>(new InputSystem());
            RegisterSystem<ILevelSystem>(new LevelSystem());
            RegisterSystem<IBookSystem>(new BookSystem());
            RegisterSystem<IMapSystem>(new MapSystem());
            RegisterSystem<IGameTimeSystem>(new GameTimeSystem());
            RegisterSystem<IRankSystem>(new RankSystem());
            RegisterSystem<IGameSystem>(new GameSystem());
            RegisterSystem<ILuaSystem>(new LuaSystem());
            RegisterSystem<IAchievementSystem>(new AchievementSystem());
            RegisterSystem<IEnemyRecycleSystem>(new EnemyRecycleSystem());
            RegisterSystem<IUISystem>(new UISystem());
            RegisterSystem<IHurtSystem>(new HurtSystem());
            RegisterSystem<ILevelUpSystem>(new LevelUpSystem());
            RegisterSystem<ILevelConfigSystem>(new LevelConfigSystem());

            RegisterModel<ICoinModel>(new CoinModel());
            RegisterModel<ISettingModel>(new SettingModel());
            RegisterModel<IBookModel>(new BookModel());
            RegisterModel<IMechanismModel>(new MechanismModel());
            RegisterModel<IPlayerModel>(new PlayerModel());

            RegisterUtility<IStorage>(new EasySaveStorage());

            Application.persistentDataPath.CreateDirIfNotExists();
        }
    }
}

System 层有什么、Model 层有什么、Utility 层有什么,一目了然。

好了,这篇就到这里。