2009-09-05 1 views
1

В моей программе (консольном приложении, которое редактирует и вменяет данные) я предоставляю пользователю возможность предоставить словарь данных несколькими способами: текстовые файлы с разделителями-табуляциями, Excel или в базе данных. Словарь состоит из нескольких (12-15) файлов/листов/таблиц. Я пытаюсь найти хороший способ загрузить данные из разных источников в базу данных.Проверка данных из файла в .NET

Моим решением до сих пор было использование репозитория для изоляции различных источников данных, и эти репозитории выплевывают DTO, которые я сопоставляю с моей моделью домена. Я использую шаблон Builder для управления всей последовательностью событий.

В основном последовательность событий для каждого файла/листа/таблицы:

  1. Получить DTOs из хранилища
  2. Validate информация в DTOS
  3. Тогда
    • Если данные хорошие, сопоставьте объект домена
    • еще сохранить список ошибок.

Мой вопрос заключается в следующем: Я пытаюсь выяснить, где лучшее место, чтобы проверить информацию, содержащуюся в DTOS? Одним из возможных решений было добавление интерфейса на DTO, например,

public interface IValidate 
{ 
    void Validate(); 
    bool HasErrors { get; } 
    IEnumerable<string> GetErrorMessages(); 
} 

Это слишком тяжело для DTO? Должна ли проверка произойти где-то еще? Извините, если это немного субъективно.

+3

Что такое DTO? (ссылка в порядке) –

+1

Я думаю, что «объект передачи данных» из PoEAA Мартина Фаулера;) – TheVillageIdiot

+0

Да, он находится здесь: http://martinfowler.com/eaaCatalog/dataTransferObject.html – TheVillageIdiot

ответ

1

Я не могу ответить на ваш вопрос окончательно, потому что, как вы сказали, этот вопрос кажется субъективным, и любой ответ в конечном итоге станет мнением. Похоже, вы действительно боретесь с дизайнерским решением, основанным на «академическом» определении DTO, а не на каком-то прагматическом требовании. Мы все были там.

Когда я сталкиваюсь с подобными ситуациями, я обычно стараюсь выполнить реализацию самым простым и прямым способом, поскольку я могу избежать таких вещей, как сложные плотно связанные отношения и чрезмерное количество дизайна. Таким образом, как только я смогу получить все, что я могу, рефрактор оттуда будет меньше.

В целом, похоже, что вы строите какую-то систему ETL. Я не знаю, с какой платформой вы работаете, но если вы используете SQL Server. Вы посмотрели на службы интеграции SQL Server? В нем есть много конструкций для обработки таких вещей, как документы Office, XML и плоские файлы в качестве источников данных.

В любом случае, удачи в вашей борьбе.

+0

ETL = Извлечь, преобразовать и загрузить? http://en.wikipedia.org/wiki/Extract,_transform,_load –

+0

Спасибо за ответ Daniel, но я просто пытаюсь получить информацию (словарь данных в этом случае) в мою программу, чтобы я мог ее использовать , Программа представляет собой пакетную систему Edit and Imputation и не имеет ничего общего с ETL. –