Каковы лучшие практики при пакетном экспорте из приложения, следующего за DDD? - PullRequest
1 голос
/ 24 февраля 2009

Допустим, у вас есть база данных с множеством продуктов / клиентов / заказов, а кодовая база (java / c #) содержит всю бизнес-логику. В течение ночи требуется несколько пакетов для экспорта данных в плоские файлы, а затем для их передачи по FTP в проприетарную систему.

Как мы должны делать это "запись базы данных в плоский файл? Каковы лучшие практики?

Некоторые мысли:

  • мы могли бы создать хранимую процедуру и использовать f.ex ssis для извлечения данных? Может быть, мы можем сделать это, если у нас есть «таблица-пакет-выход-базы-данных», но нет, если мы должны выполнить логику до того, как файл будет записан?

  • мы могли бы сделать всю логику в управляемом коде, используя те же репозитории / бизнес-логику, что и остальная часть домена? (это может быть медленный процесс по сравнению с решением для хранимых процедур)

  • Что, если единственным интерфейсом для доменных сервисов являются веб-сервисы (которые могут занимать «много времени» для каждого запроса), изменятся ли «лучшие практики»?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2009

Лично я предпочитаю использовать обычный (управляемый) код для реализации каналов вместо хранимых процедур, главным образом потому, что: 1) Обычно проще взаимодействовать с другой системой (даже если это только общий диск) 2) Легко зарегистрировать все необходимое и отладить, если что-то пойдет не так 3) Вы можете повторно использовать тот же код, который вы используете для нормальной бизнес-логики (это полезно, даже если вы просто ссылаетесь на одни и те же проекты и т. Д.) 4) Часто вам нужно обогащать данные некоторой информацией из других систем, и это опять же намного проще сделать из управляемого кода. 5) Гораздо проще тестировать управляемый код, иметь все модульные тесты, автоматические сборки и т. Д.

Я не уверен, почему это должно быть намного медленнее, чем делать все это в хранимом процессе. Вам просто нужно написать хорошую хранимую процедуру для извлечения нужных вам данных, а приложение C # / java выполнит все преобразования, обогащение и т. Д.

РЕДАКТИРОВАТЬ: Отвечая на комментарий: Я не думаю, что можно сказать, следует ли вам повторно использовать существующие хранимые процессы, настраивать их или создавать новые. Я думаю, что это снижение производительности или необходимые изменения не слишком велики, чем я бы попытался использовать один набор процедур, чтобы избежать дублирования логики. Но если различия существенны, то, вероятно, стоимость обслуживания дополнительных процедур будет ниже, чем изменение и выпуск существующих.

0 голосов
/ 27 февраля 2009

Идите с кодом репозитория, который у вас уже есть. Сделайте несколько тестов производительности и посмотрите, соответствует ли он требованиям. требования. Если есть значительный перф. проблема, которая может быть прервана до слишком большого количества операций ввода-вывода в БД, а затем перейти к sproc или реализовать репозиторий массового экспорта.

...