メソッドは関数ではないのだが

Clean Architecture を読んでいて、クラスおよびメソッドのことを、関数あるいはサブルーチンの一種としているような記述があって、やや気に障りました。

具体的には、単一責任原則の説明のところでして、

f:id:fjkz:20181013154747p:plain

上の絵のように Employee というクラスにいろんな機能を集めたら、太っちょになります。

f:id:fjkz:20181013155919p:plain

そのため、このように機能を切り出したらよいでしょうとあります。

最初に巨大化するようなクラスを定義してしまったら、こういう関数っぽいクラスに切り分けるのも仕方ないことと思います。しかし、この設計がきれいとは思えないです。手続きを頑張ってクラスの中に書いたら、余計に汚くなるように思います。世の中そんな仕事ばかりです。

普通のオブジェクトは手続きよりも、むしろデータ構造を記述するものです。普通に作ったら、欲しいデータごとにクラスがあって、それらに対する操作するがメソッドになるはずです。多分以下みたいになるのではなかろうか。

f:id:fjkz:20181013161306p:plain

なお、本には Clean Architecture といって、ドメインモデルが定義された設計についても、ちゃんと書いていることは補足しておきます。