Я работаю над проектом, в котором мне нужно взять данные из одного источника и перевести / настроить их так, чтобы они могли правильно использоваться другим источником, в данном случае базой данных. Я полагаю, что это довольно распространенная проблема, и, хотя я считаю, что у меня хорошее начало, я застрял в том, как наилучшим образом реализовать среднюю часть решения, которая отвечает за анализ исходных данных и их создание. доступны для следующей части моего процесса.
Допустим, у меня есть веб-сервис на сервере моей компании, который отвечает за получение заказа на продажу от стороннего поставщика. После того, как поставщик вызывает веб-сервис, у меня должен быть строго типизированный объект с именем MyVendor.CustomOrder
. Затем я отвечаю за синтаксический анализ экземпляра MyVendor.CustomOrder
, чтобы правильно отформатировать данные как «заказ» в системе моей компании.
У меня уже есть хранимые процедуры для вставки данных в базу данных, и я даже создал вспомогательные методы для связи с хранимыми процессами. У меня также есть интерфейсы, такие как IOrderHeader
, IOrderPayment
и т. Д., Которые существуют как «контракт» для данных, которые будут использоваться этими вспомогательными методами.
Я пытаюсь выяснить, существует ли хороший шаблон для анализа данных в исходном объекте MyVendor.CustomOrder
для предоставления данных для интерфейсов IOrderHeader
и других . Вот как я мог бы визуализировать, как эти части собираются вместе (на минимально полезной диаграмме ASCII):
________________________________
| |
| Web Service to receive order |
| |
| __________________________ |
|__| |__|
| MyVendor.CustomOrder |
|________________________|
||
||
\/
__________________________
| |
| ?????????????????????? |
| Parse |
| MyVendor.CustomOrder |
| and pass data to |
| next step |
| ?????????????????????? |
|________________________|
||
||
\/
_________________________
| |
________|________ |
| IOrderHeader | |
|_______________| Methods |
________|________ to |
| IOrderPayment | Add Data |
|_______________| to |
________|________ Database |
| IOrderDiscount| |
|_______________| |
________|________ |
| IOrderItem | |
|_______________| |
|_______________________|
||
||
\/
__________________________
| |
| Data Access Layer, |
| Database, etc.... |
|________________________|
Единственная идея, которую я имею до сих пор, состоит в том, чтобы создать один гигантский класс, который будет обрабатывать все, возможно, так:
public class MyVendorCustomOrderParserAndDatabaseUpdater
{
private IOrderItem _IOrderItem;
//other private interface instantiations
public MyVendorCustomOrderParserAndDatabaseUpdater(
MyVendor.CustomerOrder customOrder)
{
ParseOrderIntoInterfaces(customOrder);
}
private void ParseOrderIntoInterfaces(
MyVendor.CustomOrder customOrder)
{
//Parse customOrder into _IOrderItem, etc.
}
public bool SendOrderToTheSystem()
{
//Call the helper methods with the data
//from the private _IOrderHeader, etc. objects
//to update "the system"
}
}
Я бы тогда использовал этот объект с кодом наподобие этого:
... = new MyVendorCustomOrderParserAndDatabaseUpdater(
customOrder).SendOrderToTheySystem();
Мне интересно знать, существуют ли более эффективные шаблоны для решения этой проблемы получения данных из одного формата, чтобы их можно было правильно использовать в другой среде.