プロジェクトの永続化

永続化は、プロジェクトの設計上の主要な考慮事項です。 ほとんどのプロジェクトでは、ファイルを表すプロジェクト項目を使用します。Visual Studio では、非ファイルベースのデータを持つプロジェクトもサポートされています。 プロジェクトで所有されるファイルとプロジェクト ファイルの両方を永続化する必要があります。 IDE により、プロジェクトは、それ自体またはプロジェクト項目を保存するように指示されます。

プロジェクトのテンプレートは、プロジェクト ファクトリに渡されます。 テンプレートでは、特定のプロジェクト タイプの要件に従って、すべてのプロジェクト項目の初期化をサポートする必要があります。 これらのテンプレートは、後でプロジェクト ファイルとして保存し、ソリューション全体で IDE で管理できます。 詳細については、「プロジェクト ファクトリを使用したプロジェクト インスタンスの作成」と「ソリューション」を参照してください。

プロジェクト項目は、ファイルベースの場合も、非ファイルベースの場合もあります。

  • ファイルベースの項目は、ローカルにもリモートにもすることができます。 たとえば、C# の Web プロジェクトでは、リモート システム上のファイルへの接続はローカルに保持されますが、ファイル自体はリモート システムで保持されます。

  • 非ファイルベースの項目は、データベースまたはリポジトリに項目を保存できます。

コミット モデル

プロジェクト項目が配置されている場所を決定したら、適切なコミット モデルを選択する必要があります。 たとえば、ローカル ファイルを使用したファイルベース モデルでは、各プロジェクトを自律的に保存できます。 リポジトリ モデルでは、1 つのトランザクションに複数の項目を保存できます。 詳細については、「プロジェクト タイプのデザインの方針」を参照してください。

プロジェクトでは、ファイル名拡張子を決定するために、IPersistFileFormat インターフェイスを実装します。ここには、オブジェクトのクライアントで [名前を付けて保存] ダイアログ ボックスを実装できるようにする、つまり [ファイルの種類] ドロップダウン リストに入力して初期ファイル名拡張子を管理できるようにするための情報が表示されます。

IDE では、プロジェクトの IPersistFileFormat インターフェイスを呼び出し、プロジェクトがプロジェクト項目を必要に応じて永続化する必要があることを示します。 そのため、オブジェクトは、そのファイルと形式のすべての側面を所有します。 これには、オブジェクトの形式の名前が含まれます。

項目がファイルでない場合でも、IPersistFileFormat は非ファイルベース項目が永続化される方法を示します。 プロジェクト ファイル (Visual Basic プロジェクトの場合は .vbp ファイル、Visual C++ プロジェクトの場合は .vcproj ファイルなど) も永続化する必要があります。

保存操作の場合、IDE では実行中のドキュメント テーブル (RDT) を調べ、階層により IVsPersistHierarchyItem および IVsPersistHierarchyItem2 インターフェイスにコマンドが渡されます。 IsItemDirty メソッドは、項目が変更されているかどうかを判断するために実装されます。 項目が変更されている場合、SaveItem メソッドは変更された項目を保存するために実装されます。

IVsPersistHierarchyItem2 インターフェイスのメソッドを使用して、項目を再度読み込むことができるかどうかを判断し、項目を再度読み込める場合は再度読み込みます。 また、IgnoreItemFileChanges メソッドを実装して、変更された項目が保存されずに破棄されるようにすることもできます。

関連項目