🐻‍❄️

依存関係の本質とBEAR.Sundayにおける表現方法

2025/02/12に公開

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