-3

数日前、アプリケーションのリソースをロック (アクセスを制限) およびロック解除するための簡単なツールキットを作成できると考え始めました。たとえば、プロジェクトを開くと、何らかの方法でそのユーザーにロックされ、次の人が開いたときに変更できなくなります。または、操作で特定のファイルに書き込み、特定のファイルから読み取る必要があるため、操作を実行する前に (データベース内の一部のメタデータ レコードで) それらをロックします。

かなりの設計を行ったので、実際にはかなり多くの小さな落とし穴があることが明らかになりました。現在、必要な機能を説明する必要がある状況にあり、5 つの異なるタイプのロックが定義されています (所有者、書き込み、読み取り専用、削除、削除なし) であり、同じオブジェクトおよび親子階層に適用されるというコンテキストで、それらの間の関係を指定する必要があります。

これは、維持およびテストするためのかなりの量のコードに変換されます。これを考えると、この種のことをすぐに実行できる無料の .NET ライブラリが利用できるかどうか疑問に思っています (私は来週のクリスマス休暇に出かけます。私のtakelitを完成させてアプリケーションにプラグインするよりも、他の開発者の1人がライブラリをプラグインする方が簡単だと思います)。

C# .NET と SQL Server 2008 R2 を使用しています。

更新: リソースとは、データベース内のメタデータによって参照されるファイルを意味します。

4

2 に答える 2

0

悲観的なロック戦略を説明しています。これは、コードをデータベース トランザクション (別名、分散トランザクション) に参加させることで処理するのが最適です。これにより、コードはトランザクションをコミット/ロールバックし、ロックを解放できます。これは、COM+ トランザクションを使用して実現できます。ただし、代わりに楽観的なロック戦略を使用する方が良い場合があります。詳細な回答については、こちらを参照してください。

于 2012-12-13T15:36:37.807 に答える
0

設計しすぎている可能性があります。DB は同時にアクセス可能であり、重要な相互依存操作のためにトランザクションを使用することを意図しています。データ フローを再考し、複数のユーザーが共同作業できるようにする必要があります。たとえば、ユーザーが作業中のプロジェクトの一部をダウンロードし、それらを一度にコミットした場合です。もちろん、いくつかのマージが必要になる場合があります。タスクによっては、DB の代わりに、または DB と共にバージョン管理システム (SharpSVN) を使用することもできます。

于 2012-12-13T15:24:32.487 に答える