Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

なぜRay.Diのドキュメントサイトを整備するのか #19

Open
koriym opened this issue Feb 24, 2022 · 1 comment
Open

なぜRay.Diのドキュメントサイトを整備するのか #19

koriym opened this issue Feb 24, 2022 · 1 comment

Comments

@koriym
Copy link
Member

koriym commented Feb 24, 2022

ヒストリー

2007 Guice
2013 Ray.Di 1.0
2015 Ray.Di 2.0

Ray.Diの1.0リリースの時はPHPは5.4で当時、PHP用のDIライブラリで現在主流になりつつあるAW(auto wiring)DIコンテナはほとんどありませんでした。GuiceインスパイアのPHP実装は2つありましたが開発中断してるようだったので、Ray.Diの開発を始めました。

README

元々、「README一枚で簡潔に表す」と言う方針を立ててました。
ある程度の基礎知識を前提とし、そのためDIの理解のための説明などは省いていて可能な限り短い文章で説明をしていました。

But

当時DIを備えたPHPフレームワークもほとんどありませんでしたが、現在はAWDIコンテナも今では数多くあります。しかしオリジナルのGuiceの設計には特筆すべきものがあると考えます。

  • 多くのPHP DIコンテナが設定フェイズではクラスを組み立てることにフォーカスしていますが、Guice(Ray.Di)はDSLで束縛のルールを組み立て、そのルールだけで依存解決します。
  • "ロボットの足問題"を解決するのに"識別子"を使います。同じ型の違う依存を区別します。
  • ランタイムの束縛のサポート。https://github.com/ray-di/comparison
  • AOPサポート。PHPのDIフレームワークでAOPをサポートしているのはRay.Diだけです。
  • コンパイルタイムとランタイムの明確な区別。DIライブラリの中にはコンテナの状態を変更できないようにロックできるものがありますが(Cupsule DI)、Ray.Diではなランタイムの時には束縛を変更することが出来ません。Scriptインジェクタではライタイムにはそもそもコンテナが存在しません。
  • 型安全。束縛の時に型をチェックするので実行時ではなくコンパイル時にエラーを検出します。
  • 速度。リクエストの度にコンテナの初期化を行いません。
  • 全てDI。コンパイルタイムも手動のDIです。設定ファイルもありません。

これらのRay.Diの特徴はオリジナルのGuiceの設計の良さから来ていて、その点を十分に伝えるためにGuiceのマニュアルをベースにしたものが良いのでは考えるようになりました。改めて"Guice wiki"を見ているとソフトウエアパターンの説明や文章としても優れていると認識しました。

README.md1枚ではその設計思想を十分に伝えることが出来てきていません。

整備しよう

GuiceのドキュメントはもちろんJavaのコードをベースにしていますが、それをPHPコードに書き直して整備すると、(たとえばRay.Diを使わない人にさえ)有益ではないかと考えました。

Guiceのマニュアルに公式の日本語版はありません。PHP化+日本語化がこのドキュメントサイトの目的です。Ray.Diのユーザーガイドですが、DIを学ぶPHP利用者にとっても有益なものになればと考えました。

@koriym koriym mentioned this issue Feb 24, 2022
34 tasks
@koriym
Copy link
Member Author

koriym commented Mar 1, 2022

Related: ray-di/Ray.Di#255

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant