ドミノソフト公式ブログ

合同会社ドミノソフトの公式ブログです。

設計と命名と抽象化と

はじめにのまえに

赤いりんごとりんごを見ていろいろ連想をしているひと。かしこそう。
りんごを見る人

「この絵ってなんの絵か知ってる?」

「何でこの人ひとりでマジカルバナナしてるんですか?」

「ちゃうねん」

はじめに

こんにちは。shimmer-youthです。良い設計をすることは良い命名をすること、良い命名をするには抽象化が必要だよ、って話をしようとしてたんです。

抽象化って何だ

「抽象化」という言葉は「具体化」の対義語であることから、つい「あいまいにする」という意味にとらえられがちですが、本来は「本質を抽出する」ことです。

本質を抽出するためには、さまざまな事象を多角的な視点で見たり、共通化したり分割したりする必要があります。

そのときに冒頭の絵のひとのように、ひとつの事象に対してもいろいろ発想を巡らせなくてはなりません。実例を交えて考えてみます。

ボタンに名前をつけよう

ダイアログにボタンがふたつ表示されている。どちらも「Button」というキャプションで区別ができない。
ボタンふたつダイアログ

「ここにダイアログと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