鏡をインターフェースと実装に分けると…
ソフトウェアアーキテクチャ ― ソフトウェア開発のためのパターン体系: https://www.amazon.co.jp/dp/4764902834
ライブラリ視点と、もう少し具体的なクラスの視点
クリーンアーキテクチャのユースケース層と下位層(インターフェースアダプターやドライバー)との関係でもある
プリンタドライバだとすると、画像データやPDFなど様々なデータを同じラスター画像として変換する部分がポリシーの部分、プリンタ機種ごとに異なる処理やドライバの部分が実装
ポリシーと実装については先日のエンジンを考えると良いかもしれない。車体側のエンジンマウントがポリシーで、載せるエンジンの種類が実装。エンジンが変えられないと困る。もし変えられないと、藤原拓海も須藤京一のランエボⅢにいろは坂で再戦して勝つどころか86を手放すことになっていたかもしれないわけで、重要さも分かると思う
外から見て何をするか、という視点は重要になる。抽象化を活用するなどして「つまりこういうこと」を見いだせないと。MBOで目標を設定する再にも、ゴールとなる状態を表す場所に「〜によって〇〇をする」と手段が混じっていることがある。核は何をするものなのか、外から見てそれは何をするのかが意識できるようになると良い
余談になるが、インターフェースと実装クラスに分けたとき、外から触るのはインターフェースだけにすることに注意してほしい。 よくあるのが継承関係にあるParentとChildA, ChildBに対して、使うときにParentではなくChildA, ChildBを見てしまっているケース。 これはリスコフの置換原則にも違反するので要注意。 継承関係のあるクラスにおいて、 - 子クラスを意識するのはオブジェクトを作成するときだけ - 使うときは親クラスだけを見る。子クラスは一切触らない というソースコードにすること
* アプリとして何かを作る時に、実装しようとしているものがアプリ独自のものか、他システムにも転用できるようなものかに着目して分けること
モジュールなど一塊の機能を作る時に、「何をするものか」と「どういう実装になっているか」に着目して分けること
国語辞典: インターフェース=単語/連語/句の意味や用例を提示すること 実装=説明の仕方や解釈の違い、フォントや色遣い、装丁、デジタル/紙