Я внедряю мой сервис в мой контроллер.Должен ли я вместо этого внедрить мою службу в мою модель представления? - PullRequest
1 голос
/ 24 февраля 2012

Итак, я создаю новый веб-сайт, чтобы заменить наш текущий классический сайт ASP.Я создал базовый проект и добавил все различные технологии, которые я буду использовать.

Ninject Automapper PagedList EF 4.0

Пока у меня есть рабочий прототип сайта.Он извлекает данные из базы данных и отображается на моей странице.Я думаю, что я не следую шаблону правильно.Потому что мои действия контроллера выглядят странно.Я начинаю думать, что мне нужно поменять инъекцию, чтобы внедрить мой сервис в мою модель представления?Распространено ли вставлять сервис в ViewModel?

ViewModel

 public class ParcelDetailViewModel
    {
        public Property Property { get; set; }
        public int CurrentYear { get; set; }
        public IEnumerable<AltOwnership> AltOwnership { get; set; }
        public Ownership Ownership { get; set; }
        public TotalValues TotalValues { get; set; }
        public SiteAddressViewModel SiteAddress { get; set; }
        public Value CurrentValues { get; set; }

        public Transfer LatestTransfer { get; set; }
        public LegalDescription LegalDescription { get; set; }

    }

Контроллер

public class PropertyController : Controller
{
    ICamaService _service = null;

    [Inject]
    public PropertyController(ICamaService  service)
    {
        _service = service;
    }

    //TODO: ADD ACTIONS

    public ViewResult List(int? page, int? size = 100)
    {
        var result = _service.GetProperties(page,size);
        IList<ParcelDetailViewModel> ViewModel;
        ViewModel = new List<ParcelDetailViewModel>();
        Mapper.Map<IEnumerable<Models.Property>, IEnumerable<ParcelDetailViewModel>>(result, ViewModel);
        return View(ViewModel.ToPagedList(page ?? 1, size ?? 100));

    }


    public ViewResult Details(string id)
    {
        var property = _service.GetProperty(id);
        var acct = property.AccountNumber;
        var AltOwners = _service.GetAltOwners(id);
        var LegalDescription = _service.GetLegalDescription(id);
        var Legals = _service.GetLegals(id).FirstOrDefault();
        var Ownership = _service.GetOwnership((decimal)property.OwnerLookup);
        var Values = _service.GetValues(acct);
        var TotalValues = _service.GetTotalValues(acct);
        var Location = _service.GetLocation(property.LocationLookup);

        ParcelDetailViewModel ViewModel = new ParcelDetailViewModel();
        SiteAddressViewModel SitusAddress = new SiteAddressViewModel();

        ViewModel.SiteAddress = SitusAddress;

        Mapper.Map<Models.Property, ParcelDetailViewModel>(property, ViewModel);
        Mapper.Map<IEnumerable<AltOwnership>, ParcelDetailViewModel>(AltOwners, ViewModel);
        Mapper.Map<Ownership, ParcelDetailViewModel>(Ownership, ViewModel);
        Mapper.Map<TotalValues, ParcelDetailViewModel>(TotalValues, ViewModel);

        Mapper.Map(Location, SitusAddress);
        Mapper.Map(property, SitusAddress);


        return View(ViewModel);
    }

1 Ответ

8 голосов
/ 24 февраля 2012

Внедрение услуг в контроллеры совершенно правильно.

С другой стороны, внедрение любых сервисов в модели представлений будет противоречить идее моделей представлений - классов, которые содержат данные и не выполняют никаких действий.Что бы вы сделали со службой внутри модели представления?

...