はじめにのまえに
「この絵ってなんの絵か知ってる?」
「何でこの人ひとりでマジカルバナナしてるんですか?」
「ちゃうねん」
はじめに
こんにちは。shimmer-youthです。良い設計をすることは良い命名をすること、良い命名をするには抽象化が必要だよ、って話をしようとしてたんです。
抽象化って何だ
「抽象化」という言葉は「具体化」の対義語であることから、つい「あいまいにする」という意味にとらえられがちですが、本来は「本質を抽出する」ことです。
本質を抽出するためには、さまざまな事象を多角的な視点で見たり、共通化したり分割したりする必要があります。
そのときに冒頭の絵のひとのように、ひとつの事象に対してもいろいろ発想を巡らせなくてはなりません。実例を交えて考えてみます。
ボタンに名前をつけよう
「ここにダイアログと2つのボタンがある。あえて本質的な情報が抜けた状態。この状態だとどんな命名になってしまうか試してみよう。このボタンにどんな名前を付ける?」
「Button1, Button2とかLeftButton, RightButtonとかですかね」
「抽象化できてない状態だから、まあそういう名前しか付けられないね」
「情報を少し増やそう。こんな感じに色がついていたらどうする?」
「RedButton, BlueButtonとか。もしかしたらOkButton, CancelButtonかも」
「いい感じ。でも、どっちがOKでどっちがキャンセル?」
「普通に赤がキャンセルで青がOKじゃあ?」
「さらに情報を増やすとこう」
「ああ、これなら赤の〇がOKで青の×がキャンセルですね。OKは赤じゃなくて緑にしましょうよ。それなら勘違いしないです」
「もし左側のボタンにRedButtonという命名をしていたら、こういう変更をするときに命名と実態の乖離が起きるんだよね」
「いやまさか。こういう情報があればRedButtonなんて命名しませんって」
「実際よく見るんだよ……」
まだまだ別解はある
また次のように、ダイアログの内容によってもボタンの適切な名前が変わったりもします。
ダイアログ | 〇ボタン | ×ボタン |
---|---|---|
処理を続けますか? | OK | Cancel |
このサイトの評価を教えてください | Good | Bad |
性格診断、あなたは〇〇だと思う? | Yes | No |
得点操作ダイアログ | Plus | Minus |
まとめ
目の前の情報だけにとらわれず冒頭のリンゴを見てひとりマジカルバナナをするひとのように、多角的な思考が大事だって話をしたかったんです。
このあたりの本質を抽出して命名するのは、ミノ駆動さんの商品クラスがすごくいい例だなとも思いました。 qiita.com