私は、データベース移行のためのベースとして、次のabstract class
を使用して考える:同期または非同期メソッド
using System.Threading.Tasks;
public abstract class MigrationBase
{
public abstract string Name { get; }
public abstract string Description { get; }
public abstract int FromVersion { get; }
public abstract int ToVersion { get; }
public abstract void Apply();
public abstract Task ApplyAsync();
}
、具体的な移行がために書かれる下層データベース・システムに応じて、それが作ることvoid Apply
またはTask ApplyAsync
メソッドを実装する方が意味があります。私は、次のオプションを参照してください。
- 私はちょうど私が「例50%で、」それをoneまたはthe otherの方法のいずれかで間違った操作を行うために、具体的な移行を実装する開発者を強制的に、両方の抽象メソッドの1つを有することを決定した場合。
- 両方の抽象メソッドを持つことに決めたら、データベースシステムが両方の可能性を提供していないときはいつでも間違っています。
MigrationBase
,SyncMigrationBase
およびAsyncMigrationBase
を持ち、どこでも型キャストを使用しても私にとっては妥当ではないようです。- 私は現在欠けていますか?
今、あなたは、ADO.Netは、ほとんどの場合、同期および非同期メソッドとを提供していますデータベースアダプタは両方のバリアントを提供するので、私はちょうどのオプション2を選択することができますと言うかもしれません。あなたがADO.Netなしでもっと一般的な問題を念頭に置いて見れば、より良い解決策がありますか?
私がオプション2を選択した場合、Task ApplyAsync
の事前実装バージョンを、System.IO.Stream.ReadAsync
と同じように、スティーブン・トゥブが書いたものを考慮して提供する必要がありますか?はいの場合は、他に何に注意を払う必要がありますか?
それでは、私は 'bool'プロパティ' SupportsSync'と 'SupportsAsync'を必要とします。これは良いデザインとは思えません。 –
または、プロパティなし:私は主な機能を使うとは思わないクラスは多くの場合例外がスローされるはずです。そのため、try-catch-blocksでどのバリアントを使用するかを決定するだけです。 –