Skip to content

構想: EC-CUBE プラグイン機構を Anti-Corruption Layer で隔離・ブリッジする #3

Description

@koriym

背景 — プラグイン機構のジレンマ

EC-CUBE のプラグイン機構を BeMart (BEAR.Sunday + Be Framework) へどう扱うかには、一見 2 択しかない:

  • 忠実移植 — EC-CUBE のプラグイン機構 (Symfony EventDispatcher / Doctrine trait によるコアエンティティ拡張 / proxy codegen) を BEAR.Sunday に取り込む。しかしこれらの機構自体が、この移植が解消しようとしているアーキテクチャ問題の発生源。忠実移植は 病気を取り込む。加えて Doctrine trait 拡張は final readonly エンティティと構造的に両立しない。
  • 放棄 — プラグイン機構を捨てる。しかし EC-CUBE のプラグイン・マーケットプレイス (数百の既存プラグイン) は EC-CUBE 最大の資産の一つ。放棄は エコシステムの非連続を意味する。

提案 — 第三の道: Anti-Corruption Layer による隔離

腐敗レイヤーを「除去」も「取り込み」もせず、検疫する:

  • 旧 EC-CUBE 4.3 ランタイムを消さず、隔離された恒久的サブシステムとして保持し、そこをプラグイン・エコシステムの宿主にする。
  • BeMart (BEAR.Sunday) はクリーンな核であり続け、必要な capability を クリーンなブリッジ (Anti-Corruption Layer) 越しに legacy サブシステムへ要求する。
  • 腐敗は境界を越えない → BEAR.Sunday の final readonly / Be Framework の純度は保たれる。
  • 通常の Strangler Fig (旧が消えゆく過渡状態) と異なり、これは legacy を恒久的な bounded subsystem として意図的に残すアーキテクチャ。

なぜ実現可能か — 土台は既に 2 つ敷かれている

  1. 厳密移植が legacy 同居を可能にした。 BeMart は dtb_*/mtb_* スキーマを一切変えていない。本物の EC-CUBE 4.3 ランタイムが 同一 DB に対してそのまま走れる。「legacy を生かし続ける」の最難関=データ乖離は、別目的 (クリーンな SQL) で下した厳密移植の決定によって既に解けている。
  2. EccubeSharedSessionAdapter が実証済みの primitive。 ProdSessionOverrideModule が SessionInterface → EC-CUBE セッションのアダプタを既に持つ (ProdCsrfOverrideModule も同様)。本構想は「この実証済みパターンを汎用プラグインブリッジへ一般化する」こと。ゼロからの賭けではない。

ALPS 哲学との連続性

ブリッジ契約 (BeMart が legacy に何を要求するか) を ALPS で記述すれば、legacy EC-CUBE ランタイムは「ALPS 契約の背後にある一実装」になる — Fake と SQL が storage 契約の背後の 2 実装だったのと同型。本ブリッジは「spec が契約・実装は交換可能」の哲学の例外ではなく、もう一つの実例。

難所 (技術的チャレンジ)

  • 境界契約の設計が本体の仕事。 ブリッジは EC-CUBE のイベント系を露出してはならない (腐敗が漏れる)。BeMart 側が定義するクリーンな capability interface 群でなければならない。
  • ふるまいプラグイン vs 表現プラグイン。 決済・配送・業務ロジック系のブリッジはクリーン。テンプレート注入系は BeMart がテンプレートを所有した今は難しく、#[Embed] widget でブリッジ断片を宿す形になる。
  • プラグインによるコアエンティティ拡張データ。 プラグイン拡張データはブリッジ経由の extension data として露出し、BeMart のコア final readonly Entity には入れない。
  • 2 ランタイムの運用。 EC-CUBE は headless (サービスコンテナ + Doctrine + プラグインのみ、ルーティング/テンプレートは BeMart 所有) で最小化できるが、運用複雑度は上がる。

次のステップ

  • これは wave ではなく 研究的アーキテクチャ initiative。
  • 着手順序: 進行中の admin HTML バッチが一段落した後。
  • 最初の成果物: PoC — 実プラグイン 1 つを legacy 同居・ブリッジ経由で BeMart から動かす。境界 capability interface の最小設計 + 同一 DB 同居の検証。
  • 成功すれば「クリーンな核を保ちつつ EC-CUBE のプラグイン資産を継承する」道が開ける。

ステータス

研究構想。未スケジュール。PoC 着手の判断は admin HTML バッチ完了後。


設計討議から記録。関連: BEAR.Sunday 側の Form/Confirmation/CSRF 戦略の議論 (bearsunday/MyVendor.Cms#37)。

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

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions