僕が今この時に設計に大事だと思っているものを書き残しておく - 2016/05/04

ソフトウエアやアプリケーションの設計に正解はない。

僕が何かを設計する上で大事に思っていることってなんだろーと毎回思うので書き残しておく。

思う存分今この時に設計に大事だと思っていることを書いていってほしい(僕が書くんだが...)

基本的にAndroidのアプリの設計をメインにやっているが、あまりその枠にとらわれないようなことも書いていく。

僕が今この時に設計に大事だと思っているものを書き残しておく

僕はバカだ

まず、僕はバカだ。

バカなので頭が良さそうなエンジニア様が考えてくれた最強の設計みたいなのは厳しい。

バカを直して、頭が良さそうなエンジニア様と同じ土俵に立つという解決策もあるが、それは今日時点ですぐにできるものではないので保留する。

とにかく僕がバカであることを認めるんだ。

日々当たり前のことをInputし、Outputするんだ。見栄を張って設計とはなんぞや!をいきなり語ってはいけない。

大事なこと その1 : 僕はバカだ

僕は設計が嫌いだ

僕は設計が嫌いだ。

さっそくどうしようもない発言が出てしまった...。

いやでも、嫌いなものは嫌いなんだ。仕方ない。

なぜ嫌いなのか追々どこかで書いていくかもしれない。今はとにかく設計が嫌いということだけ言っておく。

嫌いというか、大っ嫌いだ。

大事なこと その2: 僕は設計が嫌いだ

手段と目的が逆になってはいけない

そろそろ真面目に考えよう。

自分が作っているアプリケーションはどんなものなのか?

設計はこれにも依存してくる。

Viewと呼ばれるユーザの目に見えるものが全く必要のないアプリケーションがあったとして、それにMVCだのMVVMだのMVPだのを導入しても効果は薄い。

雑に言いたいことをまとめると、手段と目的が逆になってはいけない

果たしたい目的に対して、良さそうな手段と取るべきだ。逆になってはいけない。設計を考える上でも同じだ。

大事なこと その3: 手段と目的が逆になってはいけない

設計で考慮する点

設計を考えていく過程で考慮すべき点がいくつか出てくる。

例えば、柔軟性、可視性、テスタビリティ、拡張性、信頼性、保守性、互換性、モジュール性...などなど。色々ある。

これらは設計以外にもデザインパターンなどの手法で担保できるものもある。

では上であげたようなものの中で、僕が今この時に設計に大事だと思っているものはなんなのか。

今は柔軟性、可視性、拡張性、再利用 を大事にしていきたい。

具体的にどんな風に??という話は今は保留にする。書くのがだるいんだ。

大事なこと その4: 設計で考慮する点として、柔軟性、可視性、拡張性、再利用 を大事にしていきたい

時には設計のレールから外れよう

設計と聞くと「この設計はこうあるべきだ!だからお前のその実装はMV◯◯ではない!雑種が!!」という、いわゆる厳密な定義をしたい人達からマサカリというありがたいものが飛んでくる場合がある。

別にdisってるわけじゃない。マサカリが飛んできたら、それは設計に対する愛だ!僕をもっとその設計に染めてくれる愛が飛んできてるんだ。受け止めろ。

しかしだなー、僕は設計が嫌いだ。そして、飽きっぽい。さらに、レールの上を歩くと億劫になる。

厳密に定義された世の中にはびこるMV◯とかFlux、Reduxを真面目に考えたくない。

やっているうちに、つい僕のオリジナリティーが溢れてしまい、オレオレ設計が出来上がる。

まあ...それでもいいじゃないか。オリジナリティーが許容される設計が好きだ。

それはもう厳密には設計という枠組みに収まらないかもしれない。

けれども、実際にアプリケーションのコードを書くのは僕だ。僕の好きなように書かせてくれ。

自分勝手でやばい奴に思えるが、 チームでアプリケーションを作る時は別だ。

レールの上から外れたい時には絶対に相談する。

でも、オリジナリティーを含んだ設計で僕達が組みやすいように組んでいくことで楽しくコードが書けるんなら幸せだ。

大事なこと その5: 時には設計にオリジナリティーを加えよう

まとめ

大事なこと その1 : 僕はバカだ

大事なこと その2: 僕は設計が嫌いだ

大事なこと その3: 手段と目的が逆になってはいけない

大事なこと その4: 設計で考慮する点として、柔軟性、可視性、拡張性、再利用 を大事にしていきたい

大事なこと その5: 時には設計にオリジナリティーを加えよう

以上が僕が今(2016/05/04)この時に設計に大事だと思っているものだ。

未来の僕がさらにいい設計に出会えることを期待している。