Skip to content

EC-CUBE互換コードを隔離サービス化してHard領域を移植する #24

Description

@koriym

背景

Hard/Super Hard扱いの機能をすべてBe/BEARネイティブでフルスクラッチ再実装すると、EC-CUBE互換の細部(PDF帳票、CSVフォーマット、メール文面、template/plugin/file副作用)を再現するコストとリスクが大きい。

一方で、既存EC-CUBE/Symfony由来コードをそのままHTTP Controllerとして露出するのではなく、ソースディレクトリと依存境界を隔離したうえで、BeMart側からは小さなinterface/serviceとして呼び出す形にすれば、互換性を保ちながら本体設計を汚さずに移植できる。

方針

  • BeMart本体のResource / Be Input / Finalは薄いadapter呼び出しに留める。
  • EC-CUBE由来コードは隔離ディレクトリに配置する。
    • 候補: src/Imported/Eccube/...
    • 互換service wrapper: src/Compatibility/Eccube/...
  • namespace変更は最小限から始める。
    • まずはEC-CUBE由来コードの依存解決を優先する。
    • BeMart側公開面は独自interfaceで固定する。
  • Symfony依存はcompatibility層の中に閉じ込める。
    • BEAR ResourceからSymfony container/controllerへ直接依存しない。

初期対象

  1. PDF
    • admin_order_export_pdf
    • 既存PDF生成ロジック/TCPDF設定/帳票レイアウトを隔離サービス化する。
  2. CSV export/import
    • 商品/会員/受注/配送/規格系CSV
    • EC-CUBE互換フォーマットとstreaming/download境界をadapter化する。
  3. Mail
    • 送信本文生成、テンプレート解決、通知メール送信をcompatibility service化する。
  4. Template管理
    • template install/download/delete/selectなどfile副作用のある操作をadapter化する。
  5. Plugin lifecycle
    • install/enable/disable/uninstallはSymfony/EC-CUBE互換層で扱う。
    • 将来のBe/BEAR向けplugin APIとは分ける。

実装ステップ

  • Hard/Super HardのActionRedirect行を、native / adapter / legacy compatibility / out-of-scope に再分類する。
  • src/Imported/Eccube と src/Compatibility/Eccube の配置ルールを決める。
  • PDFを最初のパイロットにする。
  • OrderPdfCompatibilityInterface のようなBeMart側interfaceを定義する。
  • Resourceはcompatibility interfaceを呼ぶだけにする。
  • 既存EC-CUBE由来コードの依存をcompatibility module内で解決する。
  • PHPUnitでResource到達、headers、content-type、代表payloadを保証する。
  • Codex内ブラウザまたはHTTP smokeでdownload到達を確認する。
  • status HTMLへadapter/legacy根拠と確認状態を反映する。

受け入れ条件

  • BeMart本体のResource/Be層がSymfony APIに直接依存しない。
  • EC-CUBE由来コードの置き場所と責任がREADME/docsに記録されている。
  • 少なくともPDFパイロットがActionRedirectではなくcompatibility service経由で到達する。
  • composer psalm と composer tests が通る。
  • status HTMLで、adapter採用理由と確認結果が追跡できる。

非目標

  • すべてを一度にフルスクラッチでBe/BEARネイティブ化しない。
  • 既存EC-CUBE ControllerをそのままHTTP routeとして公開しない。
  • 新しいBe/BEAR向けplugin API設計と、既存Symfony plugin互換層を混同しない。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions