Viktor_Ilukhin
@Viktor_Ilukhin
Just ♥ code

Есть ли смысл инкапсулировать обработку исключительных ситуаций, вынося код из контроллера в метод сущности?

Добрый день!

Подскажите, как вы считаете, как лучше реализовать проверку наличия какой-то сущности при изменении

public ActionResult SomeController(SomeModel model)
{
	
	var entityDT = m_repository.Get(model);
	
	if (entityDT == null)
	{
		HttpNotFound();
	}
	else
	{
		Automapper.Map<SomeModel,SomeEntity>(model, entityDT);
		m_repository.Save(entityDT);
		
		return View();
	}
	
}


или

public ActionResult SomeController(SomeModel model)
{
	
	var entityDT = m_repository.GetOrNotFound(model);
	
	Automapper.Map<SomeModel,SomeEntity>(model, entityDT);
	m_repository.Save(entityDT);
	
	return View();	
}


или Ваш вариант
  • Вопрос задан
  • 34 просмотра
Пригласить эксперта
Ответы на вопрос 1
1) Контроллер - связывает UI и логику, но это не сама логика, максимум тут подготовка модели к дальнейшей передаче. GRASP - Контроллер.
2) Логику по получению, маппингу и т.п. переносим в сервис. SomeModelService например.
3) Repository - просто коллекция, никаких not_found там нет.
4) Данный сценарий как я понял обновляет существующую сущность. Значит вероятно следует добавить проверку на конкуретный доступ, оптимистический, т.к. это веб. Т.е. пусть в SomeModel будет значение версии, дата или int или что вам удобно. И хендлинг всех возможных ситуаций делайте не в контроллере а в сервисе. Т.к. UI может добавится другой.
5) Вместо конкретных репозиториев и сервисов используйте интерфейсы. SOLID, буква D. Это позволит легко тестировать приложение, и разрабатывать модули не ожидая все другие модули, которые вы используете.

Но если приложение простое, или учебное, то можно просто забить на все это, т.к. оверхед большой, и пилить как удобно. В таком случае разницы между 1 и 2 способ не много, но 1-ый чище.
Примеры всяких GetOrXXX хорошо подсмотреть у C# LINQ. FirstOrDefault и т.п.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Hunt4You Севастополь
от 60 000 до 120 000 руб.
SLC7 Екатеринбург
от 50 000 до 90 000 руб.