Как бы вы разработали приложение (классы, интерфейсы в библиотеке классов) в .NET, когда у нас есть фиксированный дизайн базы данных на нашей стороне, и нам нужно поддерживать импорт данных из сторонних источников данных, которые, скорее всего, будут вXML?
Например, допустим, в нашей БД есть таблица Products, в которой есть столбцы Идентификатор заголовка Описание TaxLevel Цена
, а с другой стороны, например, Products: ProductId ProdTitle TextBasicPrice 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 будет использоваться для взаимодействия с нашей базой данных).