From 681ab6c6268ac15fac24ad6eeea3a0f33b5aa9a5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 13 Feb 2018 00:25:59 +0900 Subject: [PATCH 1/3] :sparkles: Refactor interfaces --- .../Routing/Data/DataStore/SceneDataStore.cs | 24 ++++++------- .../Domain/Repository/RoutingRepository.cs | 12 +++++-- .../Domain/Translator/RoutingTranslator.cs | 6 +++- .../Routing/Domain/UseCase/RoutingUseCase.cs | 34 ++++++++++++++++--- .../Presenter/RoutingPresenter.cs | 12 +++++++ .../Presenter/RoutingPresenter.cs.meta | 3 ++ 6 files changed, 70 insertions(+), 21 deletions(-) create mode 100644 Assets/Scripts/CAFU/Routing/Presentation/Presenter/RoutingPresenter.cs create mode 100644 Assets/Scripts/CAFU/Routing/Presentation/Presenter/RoutingPresenter.cs.meta diff --git a/Assets/Scripts/CAFU/Routing/Data/DataStore/SceneDataStore.cs b/Assets/Scripts/CAFU/Routing/Data/DataStore/SceneDataStore.cs index a5c6cea..dfa46a4 100644 --- a/Assets/Scripts/CAFU/Routing/Data/DataStore/SceneDataStore.cs +++ b/Assets/Scripts/CAFU/Routing/Data/DataStore/SceneDataStore.cs @@ -1,23 +1,24 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using CAFU.Core.Data.DataStore; -using CAFU.Core.Utility; using CAFU.Routing.Data.Entity; using UniRx; using UnityEngine; using UnityEngine.SceneManagement; +// ReSharper disable UseStringInterpolation namespace CAFU.Routing.Data.DataStore { - public interface ISceneDataStore : IDataStore { + public interface ISceneDataStore : ISingletonDataStore { - IObservable LoadSceneAsObservable(string sceneName, LoadSceneMode loadSceneMode); + UniRx.IObservable LoadSceneAsObservable(string sceneName, LoadSceneMode loadSceneMode); - IObservable UnloadSceneAsObservable(string sceneName); + UniRx.IObservable UnloadSceneAsObservable(string sceneName); } // FIXME: Scenes in Build 版と AssetBundle 版とでクラスを分ける - public class SceneDataStore : ISceneDataStore, ISingleton { + public class SceneDataStore : ISceneDataStore { public class Factory : DefaultDataStoreFactory { @@ -32,14 +33,11 @@ private Dictionary SceneEntityCacheMap { } return this.sceneEntityCacheMap; } - set { - this.sceneEntityCacheMap = value; - } } - public IObservable LoadSceneAsObservable(string sceneName, LoadSceneMode loadSceneMode) { + public UniRx.IObservable LoadSceneAsObservable(string sceneName, LoadSceneMode loadSceneMode) { if (this.SceneEntityCacheMap.ContainsKey(sceneName)) { - return Observable.Throw(new System.ArgumentException(string.Format("Scene '{0}' already has loaded.", sceneName))); + return Observable.Throw(new ArgumentException(string.Format("Scene '{0}' already has loaded.", sceneName))); } return SceneManager.LoadSceneAsync(sceneName, loadSceneMode) .AsObservable() @@ -55,11 +53,11 @@ public IObservable LoadSceneAsObservable(string sceneName, LoadScen ); } - public IObservable UnloadSceneAsObservable(string sceneName) { + public UniRx.IObservable UnloadSceneAsObservable(string sceneName) { if (!this.SceneEntityCacheMap.ContainsKey(sceneName)) { // エディタ実行でない場合には「読み込まれていない」旨を Exception として Throw する if (!Application.isEditor) { - return Observable.Throw(new System.ArgumentException(string.Format("Scene '{0}' has not loaded yet.", sceneName))); + return Observable.Throw(new ArgumentException(string.Format("Scene '{0}' has not loaded yet.", sceneName))); } // エディタ実行の場合のみ、初期シーンの直接読み込みを考慮して値を疑似構築する this.SceneEntityCacheMap[sceneName] = new SceneEntity() { diff --git a/Assets/Scripts/CAFU/Routing/Domain/Repository/RoutingRepository.cs b/Assets/Scripts/CAFU/Routing/Domain/Repository/RoutingRepository.cs index 88b58c6..9d8f49c 100644 --- a/Assets/Scripts/CAFU/Routing/Domain/Repository/RoutingRepository.cs +++ b/Assets/Scripts/CAFU/Routing/Domain/Repository/RoutingRepository.cs @@ -4,7 +4,15 @@ namespace CAFU.Routing.Domain.Repository { - public class RoutingRepository : IRepository { + public interface IRoutingRepository : IRepository { + + IObservable LoadSceneAsObservable(string sceneName, UnityEngine.SceneManagement.LoadSceneMode loadSceneMode); + + IObservable UnloadSceneAsObservable(string sceneName); + + } + + public class RoutingRepository : IRoutingRepository { public class Factory : DefaultRepositoryFactory { @@ -27,4 +35,4 @@ protected override void Initialize(RoutingRepository instance) { } -} \ No newline at end of file +} diff --git a/Assets/Scripts/CAFU/Routing/Domain/Translator/RoutingTranslator.cs b/Assets/Scripts/CAFU/Routing/Domain/Translator/RoutingTranslator.cs index 1af62a4..648ea31 100644 --- a/Assets/Scripts/CAFU/Routing/Domain/Translator/RoutingTranslator.cs +++ b/Assets/Scripts/CAFU/Routing/Domain/Translator/RoutingTranslator.cs @@ -7,7 +7,11 @@ namespace CAFU.Routing.Domain.Translator { - public class RoutingTranslator : IAsyncModelTranslator { + public interface IRoutingTranslator : IAsyncModelTranslator { + + } + + public class RoutingTranslator : IRoutingTranslator { public class Factory : DefaultTranslatorFactory { diff --git a/Assets/Scripts/CAFU/Routing/Domain/UseCase/RoutingUseCase.cs b/Assets/Scripts/CAFU/Routing/Domain/UseCase/RoutingUseCase.cs index dc47826..2ea5aff 100644 --- a/Assets/Scripts/CAFU/Routing/Domain/UseCase/RoutingUseCase.cs +++ b/Assets/Scripts/CAFU/Routing/Domain/UseCase/RoutingUseCase.cs @@ -7,24 +7,43 @@ namespace CAFU.Routing.Domain.UseCase { - public class RoutingUseCase : ISingletonUseCase { + public interface IRoutingUseCase : ISingletonUseCase { + + void LoadScene(string sceneName, LoadSceneMode loadSceneMode); + + void UnloadScene(string sceneName); + + IObservable LoadSceneAsObservable(string sceneName, LoadSceneMode loadSceneMode); + + IObservable UnloadSceneAsObservable(string sceneName); + + IObservable OnLoadSceneAsObservable(); + + IObservable OnLoadSceneAsObservable(string sceneName); + + IObservable OnUnloadSceneAsObservable(); + + IObservable OnUnloadSceneAsObservable(string sceneName); + + } + + public class RoutingUseCase : IRoutingUseCase { // FIXME: Use Zenject public class Factory : DefaultUseCaseFactory { protected override void Initialize(RoutingUseCase instance) { base.Initialize(instance); - instance.LoadSceneSubject = new Subject(); - instance.UnloadSceneSubject = new Subject(); instance.RoutingRepository = new RoutingRepository.Factory().Create(); instance.RoutingTranslator = new RoutingTranslator.Factory().Create(); + instance.Initialize(); } } - private RoutingRepository RoutingRepository { get; set; } + private IRoutingRepository RoutingRepository { get; set; } - private RoutingTranslator RoutingTranslator { get; set; } + private IRoutingTranslator RoutingTranslator { get; set; } private Subject LoadSceneSubject { get; set; } @@ -82,6 +101,11 @@ public IObservable OnUnloadSceneAsObservable(string sceneName) { return this.OnUnloadSceneAsObservable().Where(x => x.Name == sceneName).AsObservable(); } + private void Initialize() { + this.LoadSceneSubject = new Subject(); + this.UnloadSceneSubject = new Subject(); + } + } } diff --git a/Assets/Scripts/CAFU/Routing/Presentation/Presenter/RoutingPresenter.cs b/Assets/Scripts/CAFU/Routing/Presentation/Presenter/RoutingPresenter.cs new file mode 100644 index 0000000..229bdfc --- /dev/null +++ b/Assets/Scripts/CAFU/Routing/Presentation/Presenter/RoutingPresenter.cs @@ -0,0 +1,12 @@ +using CAFU.Core.Presentation.Presenter; +using CAFU.Routing.Domain.UseCase; + +namespace CAFU.Routing.Presentation.Presenter { + + public interface IRoutingPresenter : IPresenter { + + IRoutingUseCase RoutingUseCase { get; } + + } + +} \ No newline at end of file diff --git a/Assets/Scripts/CAFU/Routing/Presentation/Presenter/RoutingPresenter.cs.meta b/Assets/Scripts/CAFU/Routing/Presentation/Presenter/RoutingPresenter.cs.meta new file mode 100644 index 0000000..99de0a1 --- /dev/null +++ b/Assets/Scripts/CAFU/Routing/Presentation/Presenter/RoutingPresenter.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 83c5eb0a1ff6482982f62ae03cf434a9 +timeCreated: 1518430073 \ No newline at end of file From c4134682cc8d9cbfc64a86c006177636bad50bad Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 13 Feb 2018 00:26:15 +0900 Subject: [PATCH 2/3] :sparkles: Support Zenject --- .../CAFU/Routing/Domain/Repository/RoutingRepository.cs | 2 ++ Assets/Scripts/CAFU/Routing/Domain/UseCase/RoutingUseCase.cs | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/Assets/Scripts/CAFU/Routing/Domain/Repository/RoutingRepository.cs b/Assets/Scripts/CAFU/Routing/Domain/Repository/RoutingRepository.cs index 9d8f49c..ed6812e 100644 --- a/Assets/Scripts/CAFU/Routing/Domain/Repository/RoutingRepository.cs +++ b/Assets/Scripts/CAFU/Routing/Domain/Repository/RoutingRepository.cs @@ -1,6 +1,7 @@ using CAFU.Core.Domain.Repository; using CAFU.Routing.Data.DataStore; using UniRx; +using Zenject; namespace CAFU.Routing.Domain.Repository { @@ -23,6 +24,7 @@ protected override void Initialize(RoutingRepository instance) { } + [Inject] private ISceneDataStore SceneDataStore { get; set; } public IObservable LoadSceneAsObservable(string sceneName, UnityEngine.SceneManagement.LoadSceneMode loadSceneMode) { diff --git a/Assets/Scripts/CAFU/Routing/Domain/UseCase/RoutingUseCase.cs b/Assets/Scripts/CAFU/Routing/Domain/UseCase/RoutingUseCase.cs index 2ea5aff..d0f628c 100644 --- a/Assets/Scripts/CAFU/Routing/Domain/UseCase/RoutingUseCase.cs +++ b/Assets/Scripts/CAFU/Routing/Domain/UseCase/RoutingUseCase.cs @@ -4,6 +4,7 @@ using CAFU.Routing.Domain.Translator; using UniRx; using UnityEngine.SceneManagement; +using Zenject; namespace CAFU.Routing.Domain.UseCase { @@ -41,8 +42,10 @@ protected override void Initialize(RoutingUseCase instance) { } + [Inject] private IRoutingRepository RoutingRepository { get; set; } + [Inject] private IRoutingTranslator RoutingTranslator { get; set; } private Subject LoadSceneSubject { get; set; } @@ -101,6 +104,7 @@ public IObservable OnUnloadSceneAsObservable(string sceneName) { return this.OnUnloadSceneAsObservable().Where(x => x.Name == sceneName).AsObservable(); } + [Inject] private void Initialize() { this.LoadSceneSubject = new Subject(); this.UnloadSceneSubject = new Subject(); From 7c4b19e1db45e66de5bc5baaffb74d5c1bed8a86 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 13 Feb 2018 00:26:25 +0900 Subject: [PATCH 3/3] :sparkles: Implement Installer --- .../Scripts/CAFU/Routing/RoutingInstaller.cs | 21 +++++++++++++++++++ .../CAFU/Routing/RoutingInstaller.cs.meta | 3 +++ 2 files changed, 24 insertions(+) create mode 100644 Assets/Scripts/CAFU/Routing/RoutingInstaller.cs create mode 100644 Assets/Scripts/CAFU/Routing/RoutingInstaller.cs.meta diff --git a/Assets/Scripts/CAFU/Routing/RoutingInstaller.cs b/Assets/Scripts/CAFU/Routing/RoutingInstaller.cs new file mode 100644 index 0000000..3542288 --- /dev/null +++ b/Assets/Scripts/CAFU/Routing/RoutingInstaller.cs @@ -0,0 +1,21 @@ +using CAFU.Routing.Data.DataStore; +using CAFU.Routing.Domain.Repository; +using CAFU.Routing.Domain.Translator; +using CAFU.Routing.Domain.UseCase; +using Zenject; +// ReSharper disable ClassNeverInstantiated.Global + +namespace Modules.Scripts.CAFU.Routing { + + public class RoutingInstaller : Installer { + + public override void InstallBindings() { + this.Container.Bind().To().AsSingle(); + this.Container.Bind().To().AsTransient(); + this.Container.Bind().To().AsTransient(); + this.Container.Bind().To().AsCached(); + } + + } + +} \ No newline at end of file diff --git a/Assets/Scripts/CAFU/Routing/RoutingInstaller.cs.meta b/Assets/Scripts/CAFU/Routing/RoutingInstaller.cs.meta new file mode 100644 index 0000000..83da2bd --- /dev/null +++ b/Assets/Scripts/CAFU/Routing/RoutingInstaller.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b838b59d3c40443f9813d08adec95874 +timeCreated: 1518426688 \ No newline at end of file