3

JavaベースのWebアプリケーションの記事の改訂履歴を実装してAuditLogに保存する方法についてのアイデア

StackOverflowには、SVNクライアントのように、バージョンごとの違いを確認できる機能がすでに備わっています。

これは、実装の問題というよりも設計の問題です。

さらに:これらの変更をWebページにどのように表示しますか?

追加:提案されたソリューション

Article
--------------------------------
    Integer id
    String title
    String body
    List<Tag> tags
    AppUser createdBy
    Date createdDate

AuditLog
--------------------------------
    Integer id
    Integer objectId
    Operation operation // enum with UPDATE and DELETE. I won't audit an insert
    Date createdDate
    AppUser createdBy
    String class
    String revisionXML
    String comment

Hibernate Interceptorは、保存プロセスをインターセプトし、CastorXMLを使用し古いオブジェクトのXML文字列を作成します。

クラスとIDは、特定のオブジェクトのリビジョンを取得するために使用されます。

google-diff-match-patchは、HTMLdiffファイルの作成に使用されます

4

2 に答える 2

3

最善の解決策は、 Apache Jackrabbitなど、既にバージョンをサポートしているデータベースまたはストレージを使用することです。

それができない場合は、記事をどこに保存するかを決める必要があります。ファイルシステムで?次に、各記事をディレクトリにして、リビジョンを番号 (00001、00002 など) として保存し、最後のリビジョンの番号を特別なファイル ( などcurrent) に入れます。次に、いくつのバージョンがあるかをすばやく調べて (を調べてくださいcurrent)、前後に移動できます。

データベースを使用している場合は、記事テーブルにバージョン番号フィールドを追加し、現在のバージョンがどれであるかを示す 2 つ目のテーブルまたはフラグを追加します。で選択することもできますがmax(version)、これらの SQL コンストラクトはかなり見苦しく、混乱する傾向があります。この情報を別の場所に保存する方がはるかに簡単です。

[編集] 差分を生成するには、このプロジェクトを見てください: google-diff-match-patch

于 2009-11-04T13:29:52.253 に答える
1

内部で既存の VCS (たとえば、SVN) を使用します。改訂履歴があります。あとは、アプリから VCS へのインターフェイスを作成するだけです。

于 2009-11-04T13:30:54.657 に答える