- PR -

永続化について

1
投稿者投稿内容
zanjibar
ぬし
会議室デビュー日: 2001/10/30
投稿数: 309
投稿日時: 2002-10-22 20:16
抽象的な話なんですが、データの永続化について、入力した内容をすべてとって
おき、正しいものだけを生きのデータにするという仕組みというか発想はあるのでしょうか?
例でいうとこういったものです。
ある会社のA支店の顧客が、B支店に移ってまた、A支店に戻った場合などの履歴を
とっておくと便利なことがあります。
また、顧客が自分のプロフィール(住所、電話番号)などを間違って入力して、訂正する
場合があるのですが、いつ訂正したとか、訂正前はどこだったかなどがわかっていると
便利な場合があります。(間違って発送した先がわかったりします。)
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2002-10-22 20:50
少しずれてるかも知れませんが、Mementパターンが状態の保持をするためのデザインパターンとなります。
http://www002.upp.so-net.ne.jp/ys_oota/mdp/Memento/index.htm
を参照してください。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-10-22 23:23
永続化とどういう関係が?
そもそも、ArrayList にでもごりごり追加するだけなんでは。

private ArrayList names = new ArrayList();
private String name = null;
void setName(String name) { this.names.add(name); this.name = name; }
void getName() { return name; }

あとは適当に this.names の何番目かにアクセスするメソッドを作れば終わりでそ。
時間を残しておくなら、まぁ適当に private class でも作って組にしとくとか。

膨れる一方なので、DB にでもとっとくのが一般的かと思いますけど。
こべっこ
常連さん
会議室デビュー日: 2002/06/22
投稿数: 20
投稿日時: 2002-10-23 10:43
解答も抽象的になりますが、私はDBでその手のことはやっています。
1.富豪的な方法
全て追加にして、挿入日が最新のものだけをピックアップ
→グループ化して最小値を取り出すので、量が多くなるとしんどい

2.泥臭い方法
過去のデータが入るテーブルを用意する。
過去データと比較したいときだけ過去テーブルを参照する。

3.更新のタイミングで変更点を記録
「何を変えたか」ということだけが追記されつづけるログのようなテーブルを
作る。フォームでの更新時にログに追記するロジックを追加

どれも実際にやっています。3が一番要求に近い実装なので分かりやすいかなと。
あとオペレータのコメントも入れたりして。「本人が間違いを指摘したので直しました」
とか。
zanjibar
ぬし
会議室デビュー日: 2001/10/30
投稿数: 309
投稿日時: 2002-10-24 11:05
一般的な永続化の手法として、トランザクションデータをすべて保存して
おいて、それを利用するというのがあるのかなと思ったので質問です。

伝票をすべて保存(もちろんデータベースに)というのはかなり役立つ方法なんで
プログラム組むときに、よく行われている手法あったら、そのまま使いたいなと
思った次第です。(特に変数名、関数名なんかが一緒にできると便利)
引用:

しょむさんの書き込み (2002-10-22 23:23) より:
永続化とどういう関係が?

膨れる一方なので、DB にでもとっとくのが一般的かと思いますけど。

しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-10-25 03:08
Java で「一般的な永続化」というと、Serialize か EntityBean ぐらいしか思いつかなくて、
前者はトランザクションだのとはだいぶ違うので後者しかありえないんですが、
EntityBean は、CMP にしろ BMP にしろ DB の row に対応するモノなので、
こべっこさんがおっしゃっているような「一般的な DB 的履歴保存法」とは相容れませんし…。

# BMP なら根性で実装できるのかしらん?
# 結局 SQL ごりごりすることになりますけど。

まぁ、みんな SQL でごりごりやってるって感じでしょう。
1

スキルアップ/キャリアアップ(JOB@IT)