. net MVC——使用类作为模型

本文关键字:模型 MVC net | 更新日期: 2023-09-27 18:01:34

在我的MVC应用程序中,几个视图模型将几乎相同。与其每次都复制模型,不如直接创建一个类。我不确定的是如何在每个模型中包含这个类。

例如,假设我的一个模型是这样的:

public class AccountProfileViewModel
{
    public string FirstName { get; set; }
    public string Lastname { get; set; }
    public AccountProfileViewModel() { }
}

但是我知道FirstName和LastName将在许多模型中广泛使用。因此,我创建了一个类库,其中包含AccountProfile:

namespace foobar.classes
{
    public class AccountProfile
    {
        public string FirstName { get; set; }
        public string Lastname { get; set; }
    }
}

回到模型,我如何包含类,使FirstName和LastName在模型中,但不是专门创建的?

. net MVC——使用类作为模型

创建一个基类,然后使用继承,您可以访问这些公共属性。

public class AccountProfile
    {
        public string FirstName { get; set; }
        public string Lastname { get; set; }
    }
public class OtherClass : AccountProfile 
    {
        //here you have access to FirstName and Lastname by inheritance
        public string Property1 { get; set; }
        public string Property2 { get; set; }
    }

除了使用继承,您还可以使用组合来实现相同的目标。

参见优先组合而不是继承

应该是这样的:

public class AccountProfile
{
    public string FirstName { get; set; }
    public string Lastname { get; set; }
}
public class AccountProfileViewModel
{
    // Creates a new instance for convenience
    public AnotherViewModel() { Profile = new AccountProfile(); }
    public AccountProfile Profile { get; set; }
}
public class AnotherViewModel
{
    public AccountProfile Profile { get; set; }
    public string Property1 { get; set; }
    public string Property2 { get; set; }
}

您也可以实现像IProfileInfo这样的接口,这可能更可取,因为类可以实现多个接口,但只能继承一个类。将来,您可能希望在代码中添加一些要求继承的其他统一方面,但您可能不一定希望从具有Firstname和Lastname属性的基类继承一些类。如果你正在使用visual studio,它会自动为你实现接口,所以没有真正的额外的努力。

public class AccountProfile : IProfileInfo
{
    public string FirstName { get; set; }
    public string Lastname { get; set; }
}
public interface IProfileInfo 
{
    string Firstname {get;set;}
    string Lastname {get;set;}
}

这个评论太长了,所以这只是一个基于你已经收到的答案的评论。

只有当你创建的新类基本上是相同类型的对象,只是略有不同时,你才应该使用继承。如果您试图将两个独立的类关联在一起,则应该使用属性方法。继承类似于

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime DOB { get; set; }
}
public class Teacher : Person 
{
    public string RoomNumber { get; set; }
    public DateTime HireDate { get; set; }
}
public class Student : Person
{
    public string HomeRoomNumber { get; set; }
    public string LockerNumber { get; set; }
}

合成应该这样使用。

public class Address 
{
    public string Address1 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
}
public class StudentViewModel
{
    public StudentViewModel ()
    {
        Student = new Student();
        Address = new Address();
    }
    public Student Student { get; set; }
    public Address Address { get; set; }
}