Skip to content

Welcome画面関連:IpcMainHandle・WindowManager周りのアーキテクチャを改善する #2923

@Hiroshiba

Description

@Hiroshiba

内容

IpcMainHandleやWindowManagerの責務分離とシングルトンパターンへの統一を行いたい。

背景

PR #2866 でWelcome画面が導入された際、IpcMainHandleやWindowManagerの設計に一貫性のない部分が生じた。

現状の問題点

  1. windowManagerの取得方法が不統一

    • 循環参照の問題で、各関数の下で毎回getされるようになった
    • 他の依存関係はファイル上部で定義されている
  2. appStateControllerのインスタンス取得が不統一

    • 外でインスタンス持ってきたほうが統一感がある
  3. ipcのregister登録の責務が不適切

    • Windowを管理するクラスが直接実行している
    • 責務をAppStateControllerか、しかるべきクラスに持たせるべき
  4. IpcMainHandleだけDI方式

    • 他はシングルトンインスタンスをgetして使うパターン
    • 柔軟性を考えるとインスタンスをgetする形のが取り回しやすい
  5. welcomeIpcMainHandleもシングルトン化すべき

ref: #2866 (comment)
ref: #2866 (comment)
ref: #2866 (comment)
ref: #2866 (comment)
ref: #2866 (comment)

Pros 良くなる点

  • コードの一貫性が向上する
  • 責務が明確になり、保守性が向上する

Cons 悪くなる点

  • 変更行数が多くなる可能性がある

実現方法

  • IpcMainHandleをシングルトンインスタンスにする
  • registerIpcHandleをそのクラスに定義する
  • staticDirPath、appDirPath、initialFilePathはAppStateControllerが管理して返すようにする

VOICEVOXのバージョン

mainブランチ

その他

(参考)変更対象ファイル:

  • src/backend/electron/ipcMainHandle.ts
  • src/backend/electron/manager/windowManager/main.ts
  • src/backend/electron/welcomeIpcMainHandle.ts
  • src/backend/electron/appStateController.ts

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions