リファクタリングとpublished

昨日、Erich Gammaのインタビューを読んだ勢いでid:wildcatsさんのところにコメントしたら、artonさんからもご意見が。
http://d.hatena.ne.jp/wildcats/20050726/1122389747
http://arton.no-ip.info/diary/20050727.html#p02

概念的にフレンドアクセスとそれ以外の2つに分けて、フレンドにはclassを触らせることを許可して、それ以外にはinterfaceしか触らせないようにする。ではどうだろうか?

フレンドって、新しい依存性のレベルを導入すると、ちょっと複雑さが増えて面倒かな、と思いました。結局みんな親友だね、みたいな結末が待ってそう。

複数の責務を持つpublishedなメソッドって別に構わないと思うので(サービスだ)そこは違和感を覚えた。レイヤー分けの問題に過ぎないと思うからだ。具体的にはpublishedなメソッドの中で複数の単責務なメソッドを呼び出すという考え方を取れば良いし、その単責務なメソッドを同一パッケージ内の複数のクラスやあるいは同一クラスの複数のメソッドとして分ければよいのではなかろうか? というか、外部へ公開するということはそういうことだと思う。

納得。外から見たときの振る舞い、サービスっていう観点と、仕組み的・実現方法的な観点から見た責務っていうのは分けて考えないといけないかも。