如何在.NET中設計應用程序(類,類庫中的接口),當我們有固定的數據庫設計時,我們需要支持從第三方數據源,這很可能是XML?從第三方數據源導入數據(開放式架構設計)
例如,讓我們說,我們已經在我們的數據庫產品表具有列 編號 標題 說明 TaxLevel 價格
和我們有例如產品的另一面: 產品編號 ProdTitle 正文 BasicPrice 數量。
目前我這樣做: 讓第三方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將用於與我們的數據庫進行交互)。
對不起,但我沒有詢問映射場景,問題更多的是關於設計。我的類和接口應該如何設計? 我知道這個問題還不夠清楚,但我無法更好地解釋它。 – mare 2010-06-10 19:10:04
編輯我的答案。有時,如何映射數據是實際設計的重要組成部分。 – 2010-06-10 19:52:13
我已經接受您的解決方案,因爲可能是最好的,但由於缺乏XSLT知識,我不會那樣做。 – mare 2010-06-11 11:19:22