HomeRecipeの新しい食材リストですよ。
これは ハリボテじゃなくて、ちゃんとテスト用のレシピデータを表示させたものです。
これまでとの違いは、階層表示に対応したことです。
これまでも、見出しを入れることはできたんですが、階層表示にしたことで、中身を折り畳んだり、グループを丸ごと移動させたりということができるようになりました。
今のところ、項目の表示と並べ替えしかできませんが、これから項目の追加や削除などの機能を追加していきます。
食材リスト以外にも、基本的なデータクラスはほぼ実装できています。
あれこれ勉強したおかげで、クラス構造がすっきりして、実にわかりやすくなりました。
前には11個もあったレシピクラスのメンバ変数も、何と4つにまで減らすことができました。
いやいや、やればできるもんですね。
その代わり、データクラスの数は12個から14個に増えたわけですが、無駄な重複がなくなって、ひとつひとつがとてもシンプルになりました。
そして、それぞれのデータクラスに対応する形で、表示用のコントロールクラスを実装していきます。
その第一弾が、この食材リストというわけです。
そして、第二弾が手順リスト、第三弾がレシピ全体のHTML表示となります。
そこまでできれば、後はレシピに至るまでの道筋を用意すれば、とりあえず完成です。
すでに、必要なクラスの個数がわかっているので、作業がとても楽になりました。
20日には、絶対に間に合わせるぞ!
ところで、この食材リストなんですが、項目の並び替えで、予想以上に手間がかかってしまいました。
階層表示をしなければ、リスト自体はREALbasicがお任せで並べ替えてくれるので、対応するデータの並び替え処理をするだけで済むんですが、階層表示にすると、リスト項目の並び替えも自分でやらなきゃならなくなるんですよ。
それなのに、下位の階層に項目を追加する命令がないじゃありませんか。
結局、移動先の階層を一旦閉じてから再び開くという方法で切り抜けましたが、リスト項目とデータ項目を同期させるための処理も複雑になってしまって、ずいぶん苦労しました。
実は、ListBoxのCellTagでリスト項目に識別用のタグがつけられるんですが、その型がVariantなんですよ。
ここでObjectを参照できるようにしてくれたら、処理がずっと楽になったんですけど…。
こういうところが、REALbasicって抜けてるんですよね。
ただ、そのおかげで、これまで勉強してきたことを、自分の経験として吸収できたように思います。
たとえば、階層表示ということで、最初はNodeクラスにParentとChild()をつけて、多階層に対応させてたんですが、処理が複雑になり過ぎて、テストやデバッグが面倒になってきました。
でも、実際の食材リストは2階層しか使わないので、現状では多階層に対応することは過剰機能です。
そこで、2階層の食材リストに最適化させたところ、ずっと処理が簡単になりました。
「現状で最も単純な実装をすること」というのは、XPエクストリームプログラミングで繰り返し言われてきたことです。
ところが、階層表示というだけで「多階層に対応できるようにした方が良さそうだ」と、ありもしない将来性に惑わされてしまい、わざわざ問題を難しくして苦労を背負い込んでしまっていたんですね。
以前の私なら、将来への投資ということで意地になって実装させて、ますますシステムを複雑にしていたことでしょう。
というわけで、早め早めのリファクタリングで頑張ります!