skillup

技術ブログ

アーキテクト設計全般

オブジェクト指向設計 柔軟なインターフェイス

投稿日:2017年8月28日 更新日:

オブジェクト指向シリーズ。今回はインターフェイスについて。

インターフェイスといっても、implementsを使った実装だけではなく、要はあるクラスが外部の窓口となるときに使うメソッドってことだと思う。

柔軟なインターフェイス

メモ

  • インターフェイス(正確にはパブリックインターフェイス)により内部構造を隠蔽する(p90の厨房の例はわかりやすすぎ)のが基本。
  • パブリックインターフェイスはクラスの責任を明確に述べる契約書
  • シーケンス図を書いて、「どのように」を伝えるのではなく「何を」頼むか。
  • 内部のクラスにはあえてタッチせず(これに関しては「どのように」に属する)、あくまでインとアウトだけを考える(これが「何を」に当たる)
  • 内部のクラスが保持しているクラスのさらにメソッド・・みたいな書き方をしない
  • なるべく内部を公開しない。インターフェイスが契約書であり、

実際のコーディング上のコツ

  • 引数に関しては不変なものを変数でとり、オプションの引数としてハッシュをとる。
  • チェーン的なドットは1つまで(Aに依存しているBに依存しているCというものを使ってはダメ)にしてなるべく依存度を下げる。3~4つのようなチェーンメソッドは依存度を上げ、変更が難しくなる。デルメルの法則(P114)

感想

この章はコードがない分抽象的な例が多くてなかなか難しかった・・。

ポイントとしては内部構造にできるだけ、公開しない=依存しないようにするってことだと思う。入口(インターフェイス)のところで主要となる引数と戻り値を決めたら内部構造はなるべく隠蔽するスタイルをとるようにする。ドットは1つまでというのはチェーン的なメソッドを前提とするとクラスの関連性が深くなってしまい、密結合になってしまうため。

自分自身、このスタイルのコーディングを練習しているけど、1クラスを単一責任にするとpublicなクラス(外部から呼ばれる)は非常に少なくなり、あとは内部の中だけで呼ばれるものが非常に多くなる。このスタイルを目指すべし。また内部で外部のクラスを使うときは依存度が高くならないように(クラスのクラスなど)注意。

-アーキテクト設計全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

event-listenerについて

前回Observeパターンに触れましたが、少し似たパターンとしてevent-listenerを使ったパターンが存在します。 Model(Eloquentのフック)というのが大まかな共通項ですかね。 そ …

no image

オブジェクト指向設計 ダックタイピング

オブジェクト指向シリーズ。ダックタイピング・・読む前は名前は聞いたことあるような気がする・・程度で細かいことは何一つわからない状態でした。今回具体的なコード例があった分イメージを何とかつかむことはでき …

no image

HTTPリクエストの分類について(POST、PUT、PATCT)

HTTPリクエストの分類(主に更新系のもの)について。 Contents1 POST2 PUT3 PATCH POST 更新系の代表的なHTTPリクエストですね。 通常はデータの取得=GET、更新=P …

no image

アプリケーションアーキテクチャについて 〜ドメインモデルに関して〜

前回のトランザクションスクリプトパターンの反省から 今回はいわゆるドメインモデルの具体例に関して。 ドメイン駆動型設計には以下のような特徴があります。 大きく、アプリケーションの構成を以下のように分け …

no image

Observeパターンについて

Contents1 Observeパターン2 他の対策2.1 プログラムで頑張って制御2.1.1 メリット2.1.2 デメリット2.2 Databaseのtirggerを使う(DB更新系のみ)2.2. …

アーカイブ