@Mindgrow

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

Добрый день!

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

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();	
}


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

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

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

Войти через центр авторизации
Похожие вопросы