Я изо всех сил пытаюсь понять, почему абстракция необходима для основного веб-API asp.net. Я программист-любитель, поэтому это может быть ужасный вопрос, но я изо всех сил пытаюсь найти на него хороший ответ. Мое приложение — это приложение MVC, но это SPA, поэтому я решил наконец разделить свой бэкэнд и интерфейс. Но именно поэтому я начинаю сомневаться в своей текущей настройке серверной части. В настоящее время у меня есть контроллер для каждого аспекта моего приложения, например DashboardController, AccountController и т. д. для каждой страницы моего приложения, поэтому я объединяю свой запрос API с соответствующей страницей/контроллером. Я использую некоторые преимущества внедрения зависимостей и сервисов для вещей, которые я использую в контроллерах и методах в контроллерах, таких как методы графа MS для загрузки документов или отправки электронных писем и т. д. Каждый раз, когда я запускаю изящный SQL-запрос, я делаю это непосредственно в контроллере. как в этом примере:
Код: Выделить всё
[HttpGet]
public async Task GetMyReviews()
{
string json;
string query;
using (var connection = new SqlConnection(connectionString))
{
query = "select dbo.storedprocedure_JSON(@UserID)";
json = await connection.QuerySingleAsync(query, new { UserID = UserID });
}
if (json == null)
{
json = "[]";
}
return Content(json, "application/json");
}
У меня есть миллион запросов такого типа в моих контроллерах для извлечения данных из нашей базы данных и передачи во внешний интерфейс, и иногда я делаю дополнительные действия с данными перед обновлением базы данных или раньше. отправка обратно во фронтенд. Из этой статьи о реализации dapper:
https://code-maze.com/using-dapper-with ... e-web-api/
Автор создает службу dbcontext в качестве временного процесса, который затем внедряется в другой репозиторий/интерфейс, где выполняются вызовы базы данных. Затем из контроллеров вызывается сам репозиторий/интерфейс. Это создает три отдельные области, которые необходимо поддерживать в коде, и в которых я по большей части просто помещаю все в контроллер. Кроме того, когда вы видите, что реализация dbcontext непосредственно в сервис все равно требует столько же кода с оператором using, сколько у меня, так что мне снова кажется, что это не имеет особого смысла:
Код: Выделить всё
public async Task GetCompanies()
{
var query = "SELECT * FROM Companies";
using (var connection = _context.CreateConnection())
{
var companies = await connection.QueryAsync(query);
return companies.ToList();
}
}
Так является ли мой способ сделать это неправильным, и мне следует следовать этому автору (многие статьи, которые я читаю, следуют этому похожему подходу) или лучше просто? У меня около 15 контроллеров, использующих мой подход. Стоит ли этот авторский подход отделять вещи или абстрагировать, если вы планируете повторно использовать функциональность снова и снова?
Подробнее здесь:
https://stackoverflow.com/questions/781 ... controller