#c# #refactoring
#c# #рефакторинг
Вопрос:
У меня есть контроллер, где для каждого действия используется определенный параметр. Также первая строка в каждом методе является общей среди действий.
Например.
public ActionResult Add(string routeName) //Common parameter
{
var object = _repository.Get(routeName); //Common line
...
}
Как я могу реорганизовать это, что позволит мне удалить
var object = _repository.Get(routeName);
и / или параметр, но при этом иметь доступ к ним, как раньше?
Редактировать: я использую IoC для внедрения всех моих репозиториев в класс, поэтому контроллер вроде как недоступен.
Кроме того, я использую маршруты:
Например.
routes.MapRoute("Object-Add", "{foo}/{object}/add", new { controller = "Object", action = "Add" });
Возможно, это тоже проблема?
Комментарии:
1. Является ли имя маршрута статическим? ie. то же самое для каждого вызова, постоянно, каждый раз?
2. @Лассе: Да, это всегда одно и то же.
Ответ №1:
Сделайте «var object» членом вашего класса и инициализируйте его в конструкторе.
Комментарии:
1. и не вызывайте переменную ‘object’.
Ответ №2:
поместите этот код в конструктор класса контроллера параметром, который вы можете получить из запроса и сохранить в поле класса контроллера
Request.QueryString
Ответ №3:
Лучше всего было бы просто сделать это свойством в вашем классе. Я бы использовал отложенную инициализацию, таким образом, объект создается в то же время, что и обычно во время выполнения, но может быть повторно использован в каждом из действий.
Ответ №4:
Что-то вроде этого?
public class MyClass
{
private _YourObject;
public MyClass(string routeName)
{
_yourObject = _repository.Get(routeName);
}
public ActionResult Add()
{
...
}
}