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