やる気がストロングZERO

やる気のストロングスタイル

ウィザードUIのコード構成失敗して作り直した

rshinmemoというTUIメモアプリを作ってる。

github.com

操作がいわゆるウィザードUIの構成になっている。

メモを追加する際、[「新規追加」を選択する] => [日付を選択する] => [メモ名を入力する]
(今思えばウィザードUIにせず、1画面で入力させればいい気もするけど、作ったときのライブラリの事情でこうなっている)

このウィザードUIを最初作った時なかなか厳しい構造にしてしまって作り直したのだが、その辺りのことを書く。

最初の構造:呼び出しのネスト構造にしてしまった。

ウィザード画面を進むたびに、次の画面の表示と処理を持ったオブジェクトを呼び出す構造にしていた。
こんな感じ。

f:id:gatsunto-mix:20210814212349p:plain
呼び出しネスト

結果、すごくめんどくさい感じになってしまった。

◆面倒くさいこと。

とにかくデータを持ち回らないといけない。 一番最初の画面は、後続の画面が必要になるデータやオブジェクト等を全部用意して渡さなければならない。 (依存を少なくしたいので、必要なデータ等やオブジェクトはなるべくDIしたかった)

持ち回っているデータが意図通りでなかったりしてバグってたとき、どこでそれが起こったのか非常に追いかけにくかった。

作り直した構造:Viewと処理を完全分離し、ネストにならないようにした。

f:id:gatsunto-mix:20210814211941p:plain
Viewとロジックを分離

View内で行われる処理は、外から渡されるようにした。 そうすることで、処理はすべてのデータに簡単にアクセスできるので、データを持ち回る必要もなくなった。

webだったら画面遷移時に再度リクエストが飛んできてcontrollerに処理が自然に帰ってくるのであまり意識しなくてもよかったが、GUIアプリだと意図的に構造を作らないとViewとロジックが密になりやすいのかもなと思った。