0

私たちのプロジェクトでは、外部構成ファイル (server.xml など) を使用するアプリケーションを取得しました。ここで、C++/QT でセットアップ ツール GUI を設計して、そのような構成ファイルを読み取り/編集する必要があり、そのようなファイルのすべての異なるバージョンを処理できる必要があります。ユーザーはファイルのバージョンを選択し、編集を続行します。あるバージョンから別のバージョンへの変更はそれほど大きくありません。新しい xml タグ、別の名前または別の位置のタグがある可能性があります。

そうするための最良の設計アプローチは何ですか?標準の MVC デザイン パターンを使用する予定ですが、同じ GUI コードを何度も書き直すことなく、すべての異なる構成バージョンに対処するにはどうすればよいでしょうか?

サンプル構成ファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<Server_configuration ver="11">
  <core>
    <enable-tms>true</enable-tms>
    <enable-gui-messages>true</enable-gui-messages>
    <waiting-for-config-timeout>10000</waiting-for-config-timeout>
    <remoting>
      <port>50000</port>
      <join-timeout>5000</join-timeout>
      <ismultithread>true</ismultithread>
      <maxconcurrentrequests>20</maxconcurrentrequests>
    </remoting>
  </core>
  <content>
    <ftp>
      <ip>192.168.0.227</ip>
      <port>21</port>
      <userid>******</userid>
      <passwd>******</passwd>
    </ftp>
    <library>
      <ip>192.168.0.227</ip>
      <port>50023</port>
    </library>
    <local>
      <asset-root>/assetroot</asset-root>
      <kdm-expiration-warning>172800000</kdm-expiration-warning>
    </local>
    <hula-store-daemon>
      <ip>127.0.0.1</ip>
      <port>5567</port>
    </hula-store-daemon>
  </content>
</Server_configuration>
4

2 に答える 2

2

これは解決策の低下を意味するものではありませんが、ここでやるべきこと/考慮すべきことがいくつかあります。すべての状況は異なります。

  • 構成ファイルに明示的なバージョン識別子を含めます。それらを指紋で印刷することは、本当の(エラーが発生しやすい)苦痛です。
  • バージョンごとに更新されるツールを用意することを検討してください。古いバージョンを読んでそれらを適用しようとするよりも簡単です。
    • すべてのバージョンステップを個別に実行する方が簡単かもしれませんが、これにより、変換の「ロスレス」が少なくなります。幸せなハイブリッドは、バージョンごとにマイナーアップデートを実行することですが、最新(または最新の「チェックポイント」)に直接ジャンプする「チェックポイント」メジャーアップグレードがあります。これは、フルバックアップスナップショットを時々使用する増分バックアップのようなものです。
    • ユーザーに情報を提供し続けます。あなたが彼の設定を変更している場合、システム管理者は幸せではありません。プロセスをインタラクティブにするか、追加/移動/削除されたすべての設定のファイルにコメントを入れたい場合があります。また、ユーザーが参照できるように、ファイルの一部のセクションで削除された設定を保持することをお勧めします。(なぜそれらもそこにあるのかをメモしてください)。
  • 古いファイルをバックアップします。スクリプトがクラッシュし、データが消費されます。現在のファイルに名前を付けるようなことをします${oldname}.old-${ver}~。ファイルの別のセクションに設定を保存するだけでは必ずしも十分ではなく、これによりユーザーの苦痛を大幅に軽減できます。
于 2012-11-05T17:33:56.250 に答える
1

バージョン管理は常に、できる限り堅牢でシンプルに設計する必要があります。アプリケーションの各バージョンがセットアップ ツールの各バージョンと互換性がある必要があるかどうか (これはまれです)、またはたとえば、新しいセットアップ ツールが同じまたは古いアプリケーションですが、その逆はありません。

一方向の互換性

後者を設計する 1 つの可能性は、バージョン属性を XML ファイルに追加することですが、XML ファイルの構造とセマンティクスのみを常に後方互換性のある方法で変更することによって、同じ固定値を永久に維持しようとします。たとえば、要素の追加は、古いセットアップ ツールとアプリケーションの両方が動作するのと同じようにセットアップ ツールが要素の不在を解釈できる限り、下位互換性があります。古いアプリケーションとの双方向の互換性は必要ないため、新しいセットアップ ツールが常に (同等の) 値を新しい要素に書き込むことは問題ありません。

入力の下位互換性を維持できない日が来たら、バージョン属性の値を変更し、セットアップ ツールで特別なケーシングを開始するだけです。

XSD に対して XML を検証する場合、XSD が実際に役立つことが 1 つあります。それは、デフォルトの属性値を割り当てることです。このように、セットアップ ツールのソース コードは、基になるドキュメントに最近追加された属性が欠落していることに実際に気付かない場合があります。

双方向の互換性

厳密なバージョン管理が必要です。スキーマ定義 (XSD、RelayNG など) は、XML ファイルの各バージョンに対して定義する必要があり、セットアップ ツールによる読み取り時、セットアップ ツールによる書き込み時、または応用。スキーマ定義は、同じ XML の解釈が変更された場合、いくつかの連続したバージョンで同じになる可能性があるため、疑わしい場合は、常にバージョン番号を増やしてください。

最新のスキーマを編集してそれを廃止することはできないことを全員に教育するために、できることをしてください。信頼性の低いバージョン管理は、バージョン管理がないよりも悪いことです。

于 2012-11-05T17:55:56.810 に答える