Как вызвать функцию SQL из контроллера

#asp.net-mvc #cqrs #ddd-repositories #ddd-service

#asp.net-mvc #cqrs #ddd-репозитории #ddd-сервис

Вопрос:

Классы структурированы следующим образом. MVC asp.net страница

Контроллер вызывает службу приложений для получения данных и отправки данных в базу данных.

Класс сущности домена, который используется unit of work для вставки, обновления и чтения данных из базы данных.

Мой вопрос в том, где мне вызвать функцию sql

 Unitofwork.sqlquery<decimal>("select fn_testfunction").FirstOrDefault
  

Из службы приложений нужно ли мне иметь отдельную доменную службу для выполнения всех этих sql-вызовов?
Или
Могу ли я вызвать функцию sql непосредственно из службы приложений и указать там имя функции?
Я прочитал в Google, что нам нужно использовать CQRS для вызова процедур и функций. Я не понимаю, как этого добиться. Пожалуйста, предложите

Комментарии:

1. Вы сталкиваетесь с какими-либо конкретными ошибками или просто еще не пробовали это?

2. У меня нет никакой ошибки при вызове функции SQL. Я хочу знать, как структурировать класс и при вызове этой функции из контроллера, где инкапсулировать эту единицу работы — вызов SQL-функции

3. Это не имеет ничего общего с CQRS или DDD. Эти вызовы должны быть инкапсулированы в класс репозитория (проверьте шаблон репозитория), чтобы вы могли переключать свою технологию сохранения (например, свою базу данных), не влияя на остальную часть приложения.

Ответ №1:

Если вы используете DDD, предпочтительная структура :

     UI to=> Controllers(in case of MVC) to=> Services to=>Repository(for CURD operations on Aggregates and Entities).
  

Это связано с тем, что as Services предназначены для бизнес-логики, и если вы добавите еще и свою SQL-логику, во-первых, это нарушит SRP (принцип единой ответственности), во-вторых, вы не сможете изолированно протестировать свой уровень доступа к данным и бизнес-уровень.
Шаблон репозитория является важным аспектом DDD, поэтому предпочтительно обрабатывать всю логику SQL и операции CURD в репозиториях по отдельности, используя шаблон репозитория и шаблон единицы работы вместе.