MVC ViewModel范围

时间:2012-06-22 13:10:30

标签: asp.net-mvc

这可能是一个品味问题但是在创建ViewModel时最好的做法是使用下面的多个公共类(请记住这3个类只服务于一个视图):

namespace WebApp.Areas.Commerce.Models.ViewModels
{
    public class TravellersViewModel
    {
        public TicketHolder TicketHolder { get; set; }
        public List<Traveller> TicketMembers { get; set; }
        public int MaxAge { get; set; }
        public bool ShowAddress { get; set; }
    }

    public class TicketHolder
    {
        public string EmailAddress { get; set; }
        public string TelephoneNumber { get; set; }
        public string MobileNumber { get; set; }
        public string Address1 { get; set; }
        public string Postcode { get; set; }
        public string Country { get; set; }
    }


    public class Traveller
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int? Age { get; set; }
        public bool Policyholder { get; set; }
        public Traveller()
        {
            Title = "Mr";
        }
    }
}

或者最好将子类嵌套在单视图模型的范围内

namespace WebApp.Areas.Commerce.Models.ViewModels
{
    public class TravellersViewModel
    {
        public TicketHolderDetails TicketHolder { get; set; }            
        public List<Traveller> TicketMembers { get; set; }
        public int MaxAge { get; set; }
        public bool ShowAddress { get; set; }

        public class TicketHolderDetails
        {
            public string EmailAddress { get; set; }
            public string TelephoneNumber { get; set; }
            public string MobileNumber { get; set; }
            public string Address1 { get; set; }
            public string Postcode { get; set; }
            public string Country { get; set; }
        }

        public class Traveller
        {
            public int Id { get; set; }
            public string Title { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public int? Age { get; set; }
            public bool Policyholder { get; set; }
            public Traveller()
            {
                Title = "Mr";
            }
        }
    }
}

我非常喜欢构建视图模型的第二种方法,因为它可以保持所有内容。

1 个答案:

答案 0 :(得分:1)

我制作viewmodel的方法如下:

如果某个类对于一个ViewModel是唯一的,则它应该是嵌套的(没有理由从外部代码访问这样的类)。

如果可以使用这个类是不同的方式(例如,不同的视图模型使用相同的实体),它应该是separetely。