あらためてインターフェースについて勉強していく中で、新しい気づきがあったので整理してみました。
目次
インターフェースとは
インターフェースといっても様々な概念がありますが、ここではクラス内にあるインターフェースを指します。要求されるメソッドを実装するクラスは、何であれインターフェースのように振る舞うことができます。
パブリックインターフェース
クラスはメソッドを実装し、いくつかは外部から使われることが意図されており、その外部公開されたメソッドがクラスのパブリックインターフェースを構成しています。
つまり、外部から公開されたメソッドによって構成されるのが、クラスのパブリックインターフェースです。
外部から実行されることが想定され、変更可能性が低く、依存しても基本的に安全であるという特徴があります。
プライベートインターフェース
クラス内の公開されたメソッド以外はすべて、プライベートインターフェースに含まれます。
実装の詳細に関わり、変更可能性が高く、依存するのは危険であるという特徴があります。
他のクラスのプライベートメソッドに依存する際は、本質的に不安定な何かに依存していることを理解し、関係のないところにも影響を受けるリスクを十分に考慮する必要があります。
アプリケーションを設計する際はドメインオブジェクトにこだわりすぎずない
ドメインオブジェクトとは
ここでは、アプリケーションにおいてデータと振る舞いの両方を兼ね備えたものをドメインオブジェクトと呼びます。
ドメインオブジェクトはデータベースに表されることが多く、目に見える現実世界を表し明確です。例えば、レストランのシステムを考えたときに「店舗」、「お客さん」、「料理人」、「ホールスタッフ」、「メニュー」など、パッと必要そうなクラス・ドメインオブジェクトが思い浮かびます。
実際、これらのドメインオブジェクトを軸にアプリケーションを設計していくことが多かったです。
ドメインオブジェクトはアプリケーション設計において中心となるモノではない
しかし、アプリケーション設計においてドメインオブジェクトにこだわりすぎることは罠となりえます。ドメインオブジェクトを中心に考えてしまうと、無理な振る舞いをさせてしまうことにつながるからです。
本来はドメインオブジェクトを軸に設計するのではなく、メッセージに目を向け、その結果としてオブジェクトに気づきます。
アプリケーションを設計する際はメッセージに目を向ける
アプリケーションの設計を考える際は、オブジェクト間で交わされるメッセージに目を向けることが大切でだと学びました。
このメッセージが、ドメインオブジェクト同様に必要で見えにくい他のオブジェクトを見つけるための手掛かりになります。
オブジェクトとメッセージの両方の見当をつけ、相互理解を深めるにはシーケンス図がとても効果的な手法になります。
参考:シーケンス図とは