🐻❄️
依存関係の本質とBEAR.Sundayにおける表現方法
Dependency Injectionをご存知でしょうか?日本語では依存性の注入と訳されます。
その本質的な役割は
- オブジェクトグラフの構築
- 依存関係の可視化
- 規則的な方向性の確立
にあります。
このことを意識することは、DIが直接関係のない場面、例えばBEAR.Sundayのリソース設計においても大きな意味を持ちます。
リソースの依存関係の表現方法
BEAR.Sundayでは、リソースに関する以下の属性を提供しています。
- #[Embed]
- #[Link]
- #[ResourceParam]
これらの属性を使用することで、リソースが必要とする依存関係を宣言的に、そして視覚的に表現することができます。
#[Embed]と#[Link]の使い分け
リソースを埋め込むときには#[Embed]、別のリソースを操作するときには#[Link]というイメージがありますが、#[Embed]でも以下のようにメソッドを指定でき、GET以外の操作が可能です。
#[Embed(rel: 'awsomeResource', src: 'app://self/awesome-resource')]
public function onPut(array $args) :self
{
$this['awsomeResource']->method = 'post';
$this['awsomeResource']->(['args' => $args]);
unset($this['awsomeResource']);
return $this;
}
この方法を使うと、コンストラクタなどでリソースオブジェクトを受け取る必要がなくなります。
一見すると#[Embed]はGET前提であり、#[Link]をhref
でたどる方が自然に思えるかもしれません。更新後に別ページへの遷移が必要なケースでは、#[Link]を使用し、それ以外では#[Embed]を使うのはどうでしょうか。
※この記事はAnthropicのAIアシスタントClaudeとの協働で執筆しました。
Discussion