Importing data from third party datasource (open architecture design )

Posted by mare on Stack Overflow See other posts from Stack Overflow or by mare
Published on 2010-06-10T17:51:09Z Indexed on 2010/06/10 17:52 UTC
Read the original article Hit count: 196

How would you design an application (classes, interfaces in class library) in .NET when we have a fixed database design on our side and we need to support imports of data from third party data sources, which will most likely be in XML?

For instance, let us say we have a Products table in our DB which has columns Id Title Description TaxLevel Price

and on the other side we have for instance Products: ProductId ProdTitle Text BasicPrice Quantity.

Currently I do it like this: Have the third party XML convert to classes and XSD's and then deserialize its contents into strong typed objects (what we get as a result of this process is classes like ThirdPartyProduct, ThirdPartyClassification, etc.).

Then I have methods like this:

InsertProduct(ThirdPartyProduct newproduct)

I do not use interfaces at the moment but I would like them to. What I would like is implement something like

public class Contoso_ProductSynchronization : ProductSynchronization
InsertProduct(ContosoProduct p)

where ProductSynchronization will be an interface or abstract class. There will most likely be many implementations of ProductSynchronization. I cannot hardcode the types - classes like ContosoProduct, NorthwindProduct might be created from the third party XML's (so preferably I would continue to use deserialization).

Hopefully someone will understand what I'm trying to explain here. Just imagine you are the seller and you have numerous providers and each one uses their own proprietary XML format. I don't mind the development, which will of course be needed everytime new format appears, because it will only require 10-20 methods to be implemented, I just want the architecture to be open and support that.

© Stack Overflow or respective owner

Related posts about c#

Related posts about .NET