.NET でアプリケーション (クラス、クラス ライブラリのインターフェイス) をどのように設計しますか? 固定データベース設計があり、サード パーティのデータ ソースからのデータのインポートをサポートする必要がある場合、おそらく XML になりますか?
たとえば、ID タイトル 説明 税レベル 価格 の列を持つ製品テーブルが DB にあるとします。
反対側には、たとえば Products: ProductId ProdTitle Text BasicPrice Quantity があります。
現在、私は次のようにしています: サードパーティの XML をクラスと XSD に変換し、そのコンテンツを強い型指定されたオブジェクトに逆シリアル化します (このプロセスの結果として得られるのは、ThirdPartyProduct、ThirdPartyClassification などのクラスです)。
次に、次のような方法があります。
InsertProduct(ThirdPartyProduct newproduct)
現時点ではインターフェイスを使用していませんが、使用したいと考えています。私が望むのは、次のようなものを実装することです
public class Contoso_ProductSynchronization : ProductSynchronization
{
public void InsertProduct(ContosoProduct p)
{
Product product = new Product(); // this is our Entity class
// do the assignments from p to product here
using(SyncEntities db = new SyncEntities())
{
// ....
db.AddToProducts(product);
}
}
// the problem is Product and ContosoProduct have no arhitectural connection right now
// so I cannot do this
public void InsertProduct(ContosoProduct p)
{
Product product = (Product)p;
using(SyncEntities db = new SyncEntities())
{
// ....
db.AddToProducts(product);
}
}
}
ここで、ProductSynchronization はインターフェイスまたは抽象クラスになります。ProductSynchronization の多くの実装がある可能性が高いです。型をハードコードすることはできません。ContosoProduct、NorthwindProduct などのクラスは、サード パーティの XML から作成される可能性があります (そのため、引き続き逆シリアル化を使用することをお勧めします)。
ここで私が説明しようとしていることを誰かが理解してくれることを願っています。あなたが販売者であり、多数のプロバイダーがあり、それぞれが独自の独自の XML 形式を使用していると想像してください。もちろん、新しいフォーマットが登場するたびに必要になる開発は気にしません.10〜20個のメソッドを実装する必要があるだけなので、アーキテクチャをオープンにしてそれをサポートしたいだけです.
返信では、データ アクセス テクノロジではなく、設計に重点を置いてください。ほとんどのテクノロジは非常に簡単に使用できるためです (知る必要がある場合は、EF をデータベースとの対話に使用します)。