SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

VB.NET版O/Rマッピングツール「ObjectService」

VB.NET版O/Rマッピングツール「ObjectService」の使い方(バージョン管理)

ObjectServiceによるバージョン管理

データの新規追加と更新

 本項では、データの新規追加と更新の方法について紹介します。

 以下のソースコードを実行してみてください。ここでは、ユーザー名を「User1」、商品名を「スニーカー」、在庫数を「10」としました。

SubClass.vbのソースコード
Dim _ObjectService As New ObjectService1
Dim _StockList As New StockList

'ユーザー名を設定。
_ObjectService.VersionControler.UID = "User1"

'情報をセットして保存処理。
_StockList.Name = "スニーカー"
_StockList.Value = "10"
_ObjectService.SaveObject(_StockList)

 実行結果をSQL Server Management Studioで確認してみます。

テーブル「StockList」
テーブル「StockList」

 「CreateTimeStamp」に作成時の日時が自動記録され、「CreatedOperator」にソースコード上で設定したユーザー名「User1」が設定されました。「DeletedTimeStamp」は「2999/12/31 0:00:00」となっていますが、これはデータが最新であるということを示します。

 次に以下のソースコードを実行してみます。ここでは、ユーザー名を「User2」、在庫数を「100」に変更するものとします。

SubClass.vbのソースコード
Dim _ObjectService As New ObjectService1
Dim _StockList As New StockList

'ユーザー名を設定。
_ObjectService.VersionControler.UID = "User2"

'情報をセットして保存処理。
_StockList.Name = "スニーカー"
_StockList.Value = "100"
_ObjectService.SaveObject(_StockList)

 実行結果をSQL Server Management Studioで確認してみます。

テーブル「StockList」
テーブル「StockList」

 1行目の「DeletedTimeStamp」が「2999/12/31 0:00:00」から「2008/02/01 21:02:03(レコードを更新した日時)」に変わり、「DeletedOperator」に「User2」が保存されました。これは「User2によって2008/02/01 21:02:03に1行目のレコードが更新された」ということを意味します。

 2行目をみると「DeletedTimeStamp」が「2999/12/31 0:00:00」となっており、ソースコードで設定した通り、「CreatedOperator」が「User2」、「Value」が「100」となっています。つまり最新のスニーカーの在庫数は100に変わったことを意味します。

 このようにObjectServiceのバージョン管理機能を利用することで、ソースコード側では履歴を意識しなくとも、自動的にデータベースに履歴を保持していくことが可能になります。

データの抽出

 本項では、バージョン管理されたオブジェクトから、過去のある時点のデータを抽出してみます。

 以下のソースコードを実行して見ましょう。ここでは2008年1月15日午前10時30分00秒時点の、スニーカーの在庫数を抽出します。

SubClass.vbのソースコード
Dim _ObjectService As New ObjectService1
Dim _SampleClass As New StockList

'バージョンの日時を設定。
Dim _DateTime As New DateTime(2008, 1, 15, 10, 30, 0)
Dim _QueryCommand As New QueryCommand(GetType(StockList), _
"Name", "スニーカー", _DateTime)

'データ取得取得
_SampleClass = _ObjectService.LoadObject(_QueryCommand)

 バージョン(日時)を指定してデータを取得した場合、「指定した日時がCreatedTimeStampとDeletedTimeStampの期間内に含まれるオブジェクトの情報」が抽出されます。

 本サンプルの場合、バージョン(日時)指定を「2008年1月15日午前10時30分00秒」としましたので、CreatedTimeStampが「2008年1月1日 20時52分20秒」で、DeletedTimeStampが「2008年2月1日 21時02分03秒」である1行目のオブジェクト情報が取得されます。

まとめ

 履歴管理を行う場合、往々にしてデータベース構造が複雑になり、データベース管理者の負担が大きくなる場合があります。ObjectServiceのバージョン管理機能を利用すると、中間テーブルを使用せずに履歴を管理できるので、構造の単純化や管理の負担軽減を実現できます。ObjectServiceを利用することで、開発工程の枠を超えて、業務の効率化を実現できるのではないかと考えます。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
VB.NET版O/Rマッピングツール「ObjectService」連載記事一覧

もっと読む

この記事の著者

吉野健太(ヨシノケンタ)

株式会社コデックス所属。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2366 2008/04/14 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー