プロジェクト

全般

プロフィール

リファクタ #456

完了

skin property: Factory の id/name 解決を汎用 PropertyRegistry に共通化する(Phase 2)

リファクタ #456: skin property: Factory の id/name 解決を汎用 PropertyRegistry に共通化する(Phase 2)

エージェント ちゃん さんが8日前に追加. 8日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/30
期日:
2026/06/30
進捗率:

100%

予定工数:

説明

#176 の整理方針に基づく Phase 2。Phase 1(二重経路の単一化)後に着手する。

背景

id→property / name→property の解決が Factory ごとに別実装されており、ロジックが重複している:

  • FloatPropertyFactory / StringPropertyFactory:enum 走査の薄い lookup。
  • IntegerPropertyFactory / BooleanPropertyFactory:enum 走査 + キャッシュ配列 + 反転(-id)処理 をそれぞれ再実装。

name/id の探索戦略(線形走査 / StringType.get マップ / キャッシュ配列)がバラつき、name/id ドリフトのリスクもある。

対応内容

  • id ・ name 探索、キャッシュ、反転(Boolean の -id)といった反復ボイラープレートを、型ごとにパラメータ化した汎用 PropertyRegistry<T>(仮名)へ抽出し、各 Factory から利用する。
  • 算術範囲ハンドラ(LR2 連番 id 規約)はそのまま保持し、registry との合わせ方を整理する。

確認観点

  • Phase 0 のテスト(registry / ゴールデン / Mapper)を green に保つ。
  • キャッシュの同一性保証(assertSame)や反転振る舞いを崩さない。
  • パフォーマンス(ホットパスのキャッシュヒット)を損なわない。

関連するチケット 3 (0件未完了3件完了)

関連している beatoraja - リファクタ #176: skin property 定義群の肥大化を整理する方針を作る完了いづ さん2026/06/11

操作
次のチケットに後続 beatoraja - リファクタ #454: skin property: id→property の二重経路(switch vs enum)を単一化する(Phase 1)完了いづ さん2026/06/292026/06/29

操作
次のチケットに先行 beatoraja - リファクタ #457: skin property: SkinProperty の id 定数をカテゴリ別に整理する(Phase 3)完了いづ さん2026/07/012026/07/01

操作

エージェント ちゃん さんが8日前に更新 操作 #1

  • 関連している リファクタ #176: skin property 定義群の肥大化を整理する方針を作る を追加

エージェント ちゃん さんが8日前に更新 操作 #2

  • 期日2026/06/30 にセット
  • 開始日2026/06/28 から 2026/06/30 に変更
  • 次のチケットに後続 リファクタ #454: skin property: id→property の二重経路(switch vs enum)を単一化する(Phase 1) を追加

エージェント ちゃん さんが8日前に更新 操作 #3

  • 次のチケットに先行 リファクタ #457: skin property: SkinProperty の id 定数をカテゴリ別に整理する(Phase 3) を追加

エージェント ちゃん さんが8日前に更新 操作 #4

  • ステータス未着手 から 実装中 に変更
  • 進捗率0 から 10 に変更

実装に着手しました。

  • ブランチ: feature/456
  • 対応方針: id/name 探索・キャッシュ・反転の反復処理を型パラメータ化した汎用 PropertyRegistry<T> に抽出し、Float/String/Integer/Boolean の各 Factory から利用する(評価順・キャッシュ同一性・反転振る舞いは verbatim 維持、算術範囲ハンドラは保持)。

エージェント ちゃん さんが8日前に更新 操作 #5

  • ステータス実装中 から 完了 に変更
  • 進捗率10 から 100 に変更

実装完了・MR マージ済み。

  • MR: !130(feature/456develop、merge commit 1ad49668

対応内容

skin property の各 Factory に散在していた「id/name 探索・キャッシュ・反転(-id)」の反復ボイラープレートを、型パラメータ化した汎用 PropertyRegistry<T> に集約(#176 整理方針 Phase 2、#454 完了後の着手)。観測可能な振る舞いは完全 verbatim 維持の純内部リファクタ。

変更点

  • 新規 PropertyRegistry<T>: IntMap(id)+HashMap(name) で first-wins/エイリアスid展開/null値保持を統一、任意の配列キャッシュ(ID_LENGTH=65536・非nullのみ)、任意のabsキー反転モード(pos/neg別キャッシュ)、順序付きリゾルバチェーン(範囲ハンドラ/サブFactory/fallbackをenum表とfirst-matchで合成)
  • FloatPropertyFactory: rate/float/writer 3レジストリ化、Float→Rate フォールスルー・重複id first-wins・null writer 保持
  • StringPropertyFactory: registry 化(StringType.get/VALUES/ID_MAP を移管・削除)
  • IntegerPropertyFactory: value [LaneDuration, TotalNotes, 算術範囲, ValueType, fallback]/image-index [judge範囲, skinSelect, IndexType](ともにキャッシュ有)、fallback テーブルを id-only レジストリへ移行
  • BooleanPropertyFactory: [BooleanType, COURSE_STAGE, fallback] + pos/neg キャッシュ + -id 反転。IntegerPropertyCache を registry に畳み込み削除
  • 評価順・キャッシュ同一性(assertSame)・反転・enum フィールド名・public シグネチャは不変

テスト

  • .\gradlew.bat test 全スイート BUILD SUCCESSFUL(回帰なし)
  • Phase 0 既存テスト群すべて green、新規 PropertyRegistryTest(byName/byId・エイリアス・first-wins・null値・キャッシュ同一性・反転・範囲外null)追加

他の形式にエクスポート: PDF Atom