misskey icon indicating copy to clipboard operation
misskey copied to clipboard

[refactor/backend] DIコンテナ周りのスリム化

Open samunohito opened this issue 7 months ago • 5 comments

Summary

(https://github.com/misskey-dev/misskey/issues/16067 の前準備としての側面が強いです)

以下を提案したいです。

◎DIを経由しなくても実現可能な機能の分割→独立したファイルに

DIへの依存を減らせます。 src/domain/[各ドメインの名称]みたいなディレクトリを切り、DIに依存しない各機能を置くようにしたいです。

UserEntityServiceを例に挙げると、isLocalUserなど単独でも実現可能な機能がクラス関数として実装されています。 この関数を使用するためだけにDI経由でUserEntityServiceを引き込んでいる所もあり、ちょっともったいない感じになっていました。 UserEntityServiceはunittestでの準備が大変な実装の一つなので、切り離せるものは切り離したいところです…

◎configのDIをやめる

configは再起動するまで値が変わらないので、DI経由で引き込む必要が無いと思っています。 また、configを切り離すことで↑の分割可能関数を増やす狙いもあります

Purpose

  • importの循環参照解決
  • unittestの準備処理(beforeAll/beforeEachとかでやってるやつ)を軽量化

Do you want to implement this feature yourself?

  • [ ] Yes, I will implement this by myself and send a pull request

samunohito avatar May 26 '25 13:05 samunohito

configのDIしない場合ユニットテストで注入できなくなるのではないかしら

syuilo avatar May 28 '25 11:05 syuilo

そこはやり方次第かと(一回読んだ設定値をキャッシュするようにする想定で、テスト時だけその値を書き換えられるようにするなど…あとjest.mockとかもあるし)

samunohito avatar May 28 '25 11:05 samunohito

ほむん

syuilo avatar May 28 '25 12:05 syuilo

コンセプトは良さそうな気がするけど結構大変になりそう(実装もレビューも)

syuilo avatar May 28 '25 12:05 syuilo

結構大変になりそう(実装もレビューも)

なのでprを複数段階に分けようと思っています。

  1. DIを経由しなくても実現可能な機能の分割→独立したファイルに
  2. configのDIをやめる
  3. 2の結果、切り出し可能となった機能の分割→独立したファイルに

みたいな感じで。動く状態を維持しつつ、徐々に進めるイメージです

samunohito avatar May 28 '25 23:05 samunohito