8

時間の経過とともに、オブジェクトプロパティを保存およびロードするために独自の形式を使用してきましたが、これを再検討する必要があるので、Delphi独自のテキストDFM形式を使用することに疑問を持っています。これが実際には「内部」形式であることは知っていますが、そのリーダーはかなり明確に定義されているように見え、すべてのタイプのプロパティに対応しています。起こりうる落とし穴について誰かコメントがありますか?

4

1 に答える 1

17

DFMが「内部フォーマット」であるとは言いません。確かにDelphiはフォームとデータモジュールに内部的に使用しますが、ストリーミングを実行するTReaderクラスとTWriterクラスは一般公開されており、文書化されています。したがって、それらは明らかにエンドユーザーも対象としています。

ここで、考えられる問題は、ストリームを保存した後で、ストリーム内のクラスの1つが変更されて、ストリームに互換性がなくなった場合です。D7でD2007+に保存されたフォームを開こうとすると、Delphiでこれが表示された可能性があります(プロパティがありません)。しかし、それが起こったとしても、解決するのはそれほど難しくありません。問題の原因となっている正確なプロパティを報告する例外が発生します。また、ストリーミングするすべてのクラスを登録する必要がありますRegisterClass

DFMは、バイナリ形式またはテキスト形式で保存できます。バイナリで保存した場合でも、(を使用してObjectBinaryToText)テキストに変換できます。テキスト形式にすると、簡単に修正できます。

したがって、構造の互換性のない変更が原因で発生する可能性のある問題は、DFMメカニズム自体とは関係がなく、他のストリーミングメカニズムを使用しても発生します。

寿命に関しては、最新のDelphiでD1とともに保存されたDFMを引き続き開くことができます。したがって、下位互換性を念頭に置いている限り、恐れることはありません。

結論として、特定の形式、DFM、XML、JSON、独自の形式の選択は、実際には寿命に影響しません。それらはすべて同じレベルの互換性を必要とします。

フォーマットを選択する理由は、以下に関する決定と関係があります。

  • 他のアプリ/サービスとの相互運用性
  • サイズ/速度/人間の読みやすさ

しかし、あなたは質問の中でそれらのどれにも言及しませんでした。

したがって、DFMを使用して独自のロールを実行することをお勧めします。これは、維持するコードが少なくなることを意味します。

于 2010-11-13T12:03:55.683 に答える