如果Model应该包含所有业务逻辑,那么在Model中调用类方法的最佳方法是什么? (更多内部)

时间:2015-03-02 16:03:45

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

好吧,所以我一直都读到,在ASP.NET MVC中,应该始终将业务逻辑放在模型中。所以,假设我有这个模型类:

public class CarModel
{
        [Display(Name = "Car Manufacturer")]
        [Required(ErrorMessage = "A Car Manufacturer is required")]
        public string CarManufacturer { get; set; }

        [Display(Name = "Car Year")]
        public int CarYear{ get; set; }
}

如何向此模型添加方法,然后在此模型的实例上运行该方法?我的意思是说我有一个像这样的新实例:

CarModel MyCar = new CarModel();

如何向此模型添加方法,然后在模型的新MyCar实例上运行该方法?我可以这样做:

MyCar.MyModelMethod();

如果是这样,我如何编写模型方法以允许这种调用?

1 个答案:

答案 0 :(得分:2)

这有两个方面。有MVC 模式,然后是ASP.NET MVC,这个框架在很大程度上实现了MVC模式。

在MVC中,模型是所有业务逻辑的避风港。但是,ASP.NET MVC并不真正具有模型的概念。这些类通常被称为"模型"实际上只是实体,你的POCO绑定到数据库表。这些是MVC风格模型的不良借口,这就是为什么大多数开发人员用其他两个概念补充它们:视图模型和数据访问层或DAL。

查看模型只是类,但具体来说,它们是您专门为一个或多个视图服务的类。它们通常代表一些实体类,但它们将具有不适合添加到实体类的其他属性和方法。在您的操作中,您可以将实体映射到这些视图模型/从这些视图模型中映射,从而创建关注点分离:实体只关注数据库的需求,而视图模型只关注自身的需求。图。

DAL是您拥有存储库或服务类的地方。这些将保留特定于使用您的实体类的逻辑。实体只保存数据,而DAL确定如何检索,保存数据等。

这三个(实体,视图模型和存储库/服务)一起构成了MVC模型。