Поскольку я ознакомляюсь с Asp. Сетевой MVC, я использую MVC 2, я заметил использование класса BaseViewData в проекте Kigg, который я не уверен, как реализовать.
Я хочу, чтобы каждый из моих ViewModels имел определенные значения в наличии. Используя iterface приходит на ум, но я задаюсь вопросом, что лучшая практика и как Kigg делает это?
Kigg
public abstract class BaseViewData
{
public string SiteTitle { get; set; }
// ...other properties
}
public class UserListViewData : BaseViewData
{
public string Title { get; set; }
// .. other stuff
}
В моем приложении WebForms я использую BasePage, который наследовался Системе. Сеть. UI.Page.
Так, в моем проекте MVC у меня есть это:
public abstract class BaseViewModel
{
public int SiteId { get; set; }
}
public class UserViewModel : BaseViewModel
{
// Some arbitrary ViewModel
}
public abstract class BaseController : Controller
{
private IUserRepository _userRepository;
protected BaseController()
: this(
new UserRepository())
{
}
}
Ссылка на методологию Kigg, как я удостоверяюсь, что каждый из моих ViewModel, который наследовался BaseViewModel, имеет свойство SiteId?
Каковы лучшая практика, образцы или шаблоны, которые я должен использовать?
Подход, который я бы выбрал, - это также использовать базовый контроллер и использовать переопределение OnActionExecuted для заполнения вашей модели общими данными. Затем просто убедитесь, что ваши контроллеры наследуются от вашего базового контроллера, а ваши модели наследуются от базовой модели.
public class BaseController : Controller
{
public override void OnActionExecuted( ActionExecutedContext filterContext )
{
var result = filterContext.Result as ViewResult;
if (result != null)
{
var baseModel = result.Model as BaseViewModel;
if (baseModel != null)
{
baseModel.SiteID = ...
}
}
}
}