Moduleで構造を分ける



/// interface Package Folder
////////////
// -- Module Interface ---
public interface IModule{
  // ICommunicator プロパティは外部に公開
  ICommunicator Communicator { get; }
  // IManager プロパティは内部アクセスのみに制限
  IManager Manager { private get; }
}
//--- Manager ---
public interface IManager{
  ICommunicator Communicator { get; }
  IManager Manager { get; } // Manager は公開されているが、実装は外部からアクセス不可
}
// ---- I/O ----
public interface ICommunicator{}
// --- Flow ---
public interface IFlow{}
  public class FlowLogic{
  public void If();
  public void While();
}
// --- Mediator 各部署内の情報の仲介役----
public interface IMediator{
  public void receive();
  public void transfer();
}
//--- State Observer ----
public interface IStateObserver{
  void Check();
  void NotifyManager(IManager manager);
}
// ---- Communicator モジュール間を接続するI/O。各モジュールに設置 ---
public interface IModuleCommunicator{
  // モジュールの状態を取得
  string GetState();
  // モジュールの進行具合を取得
  float GetProgress();
  // 他のモジュールにメッセージを送信
  void SendMessage(string message);
  // 他のモジュールからメッセージを受信
  void ReceiveMessage(string message);
  // モジュールの状態を外部に通知
  void NotifyState();
}
////////////



/// Module
public class CoreModule : IModule{}
public class FlowModule :  IModule{} // GameFlow
public class StoryModule : IModule{}
public class InputModule : IModule{}//IN
public class DisplayModule : IModule{}//OUT
public class BattleModule : IModule{}
public class FieldMotionModule : IModule{}
public class FieldModule : IModule{}
public class ItemModule : IModule{}
public class ShopModule : IModule{}
public class MenuModule : IModule{}


// GameManager(Singleton)
public class GameRoom : MonoBehaviour{} // There is a room
public class Presenter{} // I'm standing there as apresenter



// -- Story ---
public class StoryModule : IModule{

  // IModuleのManager プロパティの実装 { get { return _manager; } } のこと
  IManager Manager => _manager; // 外部からはアクセスできない
  private IManager _manager; // StoryManager のインスタンスを保持

  public StoryModule(StoryManager storyManager, StoryCommunicator storyCommunicator)
  {
      _manager = storyManager; // _manager に StoryManager を設定
      Communicator = storyCommunicator; // Communicator プロパティの設定
  }

  // ICommunicator プロパティの実装
  public ICommunicator Communicator { get; private set; }



}
public class StoryCommunicator : ICommunicator{}

// モジュール全体の統括
public class StoryManager : IManager{}
// Story Flow
public class StoryFlowManager : IManager{}
public class StoryGenerator{} // generate book from seed data
public class StoryBook{}
public class StoryMainFlow : IFlow{} // Croutin
public class StoryQuestFlow : IFlow{}
public class StoryChapterFlow : IFlow{}
// Story State
public class StoryState{} // Where we are
public class StoryTracker : IStateObserver{}
// Elements
public class Quest{}
public class Chapter{}



// --- Input Module
// Manager
public class InputManager{}

// Input Department Roles
class AboutInputDepartment{}
// Input Mode Management Team
class GameStateChecker{}
class GameFlowMediator : IMediator{}伝達係 between GameFlowChecker & InputModeCoordinator
// Input Mode Switching
class InputModeCoordinator{}
class InpuModeMediator : IMediator{}伝達係 between InputModeCoordinator & Delegate Hundler
class InputMapBook{}
class InputModeBook{}
class InputMapModeConnectionBook{}
// Input Reception Section
class InputReceptor{}
class InputMediator : IMediator{}伝達係 between Receptor & Delegate Hundler
// Delegate Hundling
class InputDelegateRegister{}
class InputDelegateHundler{}

--- shop ---
public interface IShopModule{}
public class ShopModule{}
// Manager
public class ShopManager{}
// Flow
public class ShopFlowManager{}
public class ShopFlow : IFlow{}
public class ShopSelectItemFlow : IFlow{}
public class ShopSelectItemFlow : IFlow{}

// Shop UI Department
public class ShopUIManager{}
public class ShopDialogUI{}
public class ShopItemListUI{}
public class ShopAnswerBoxUI{}
public class ShopPartyBoxUI{}
public class ShopMemberBoxUI{}
// Shop Stats Data Departmant
public class ShopCustomer{}
// Shop Owner

-- Menu --
public class MenuModule{}
// Manager
public class MenuManager{}
// Menu Flow
public class MenuFlow : IFlow{}
public class MenuFlowMediator : IMediator{}
public class MenuCommandFlow : IFlow{}
public class MenuItemFlow : IFlow{}
public class MenuTechFlow : IFlow{}
public class MenuEquipFlow : IFlow{}
public class MenuDetailedStatsFlow : IFlow{}

// Menu State management
public enum MenuState{}
public class MenuNavigator{}
public class MenuNavigationBook{}

// Menu UI Department
public class MenuUIManager{}// View Model

public class MenuCommandListBoxUI : SingleColumnBox{}
public class MenuMoneyBoxUI{}
public class MenuInfoBoxUI{}
public class MenuPartyBoxUI{}
public class MenuMemberBoxUI{}
public class MenuMemberPictureBox{}
public class MenuMemberOverviewStatsBox{}
// Item Menu
public class MenuItemListBoxUI : SingleColumnBox{}
// Tech Menu
public class MenuTechListBoxUI : SingleColumnBox{}
//Detailed Stats Menu
public class MenuMemberDetailedStatsBoxUI{}
public class MenuMemberEquipBoxUI{}
public class MenuMemberExpBoxUI{}
public class MenuMemberRecordBoxUI{} // MaxDamage, Kaishin Count, Combo Count

-- Audio --
public class AudioModule{}
// Manager
public class AudioManager{}
class GameFlowChecker{}
// Music
public MusicCoordinator
public class MusicCollection{}
public SECoordinator
public class SECollection{}

-