ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

Dataクラスでバージョンを操作するときのコンセプトを修正予定に。

さっきお風呂入ってて思ったのですが、お風呂はいる前までは、current_versionも同時に変更できるようにしていたのです。
データの更新については大まかに以下の種類があります。

  • 名前やACLなど「属性値」の更新
  • 現在バージョンの変更
  • データ本体の変更(以下2つの排他)
    • バージョンアップを伴う。
    • バージョンアップを伴わない。

で、これをマトリックスにしようとすると結構面倒くさくなるのです。特に

  • 現在バージョンの変更
  • データ本体の変更

がバッティングしたとき。どうしろよというのよ?
実際のところ、現実問題としてこのバッティングは発生しない。というか、開発者ですら途方に暮れるような変更内容なので、そういう操作はできないような画面にしちゃう。
いや、実際、画面としてこんな操作はあり得ない。Wikiも、画像も、添付ファイルも、基本的には更新画面に関して言えば次のような感じ。

  • 現在のバージョンのデータ内容を表示する部分
  • 属性値を更新する為の入力フォーム
  • 新しいデータ本体を入力する為のフォーム。
    • 「バージョンアップする?」を選択できるラジオボタンなどのフォーム

ここに、バージョンを変更する為の既存バージョンのリストと、選択の為のラジオボタンを混ぜる事はありうるのか・・・?
ねぇよ。そんなの。
だってユーザー側から見れば、そんなフォーム訳分からない。データ本体の変更してなおかつ、バージョン選択のラジオボタンを弄るとどうなるのか?・・・ユーザーも予測できないだろうし、開発者(今のところ自分一人だけだけど)もどうすりゃいいのか途方に暮れてる。
というわけで、却下。

つまるところ、更新には次の2種類になる。

  • 属性(現在バージョンを除く)+データ本体
  • 現在バージョンのみ

前者について言えば、テストするパターンは以下に収まる。

属性更新有無 データ本体(VerUP有) データ本体(VerUP無し) パターン
- - A
- - B
- - C
- D
- E
パターン 属性の"更新日/者" 属性の"現在バージョン" バージョン情報
A 更新 - -
B 更新 カウントアップ 新規レコード追加
C 更新 - 既存レコード更新
D 更新 カウントアップ 新規レコード追加
E 更新 - 既存レコード更新

また、現在バージョンのみの変更の場合も属性のupdated_at/byを更新する。

・・・なんか、結局属性のupdated_at/byは全部で変更しているのだけれど。実はこれはコレで良い。いや、風呂入る前のテストケースでは違っていて、属性だけでは更新してなかったりするのだけれど。
但し、ユーザーが「更新日付順の一覧」を見たとする場合、やっぱり、属性のupdated_at/byも同じじゃないと不自然でしょう。

まぁ、結局属性ファイル自体はどのルートでも更新掛かってしまうことになるので、ロジックも多少簡単になりそう。

決まるモノ決まったので、ラスト、風神録で軽く遊んでから寝るか・・・。( ゚Д゚)y─┛~~