Короче говоря - это хорошее дизайнерское решение для реализации большей части бизнес-логики в CLR хранимых процедурах ?
В последнее время я много о них читал, но не могу понять, когда их следует использовать, каковы лучшие практики, достаточно ли они хороши или нет.
Например, моему бизнес-приложению нужно
- парсинг большого текстового файла фиксированной длины ,
- извлечь несколько чисел из каждой строки в файле,
- в соответствии с этими числами применяются некоторые сложные бизнес-правила (включая сопоставление регулярных выражений, сопоставление с образцом по данным из многих таблиц в базе данных и т. Д.),
- и в результате этого расчета обновите записи в базе данных.
Также имеется графический интерфейс пользователя для выбора файла, просмотра результатов и т. Д.
Это приложение является хорошим кандидатом для реализации классической 3-уровневой архитектуры: уровня данных, логического уровня и уровня графического интерфейса.
- Уровень данных будет обращаться к базе данных
- Уровень логики будет работать как служба WCF и реализовывать бизнес-правила, взаимодействуя с уровнем данных
- Уровень GUI будет средством связи между Логическим уровнем и Пользователем.
Теперь, подумав об этом проекте, я вижу, что большинство бизнес-правил могут быть реализованы в SQL CLR и сохранены в SQL Server. Я мог бы хранить все свои необработанные данные в базе данных, запускать там обработку и получать результаты. Я вижу некоторые преимущества и недостатки этого решения:
Плюсы
- Бизнес-логика работает близко к данным, что означает меньший сетевой трафик.
- Обрабатывать все данные одновременно, возможно, используя параллелизм и оптимальный план выполнения.
Против
- Рассеяние бизнес-логики: какая-то часть здесь, какая-то часть есть.
- Сомнительное дизайнерское решение, могут возникнуть неизвестные проблемы.
- Сложно реализовать индикатор прогресса для задачи обработки.
Мне бы хотелось услышать все ваши мнения о SQL CLR. Кто-нибудь использует это в производстве? Есть ли проблемы с таким дизайном? Это хорошо?