如果模型应包含所有业务逻辑,那么在模型中调用 class 方法的最佳方式是什么? (更多内幕)

If the Model should contain all of the business logic, what is the best way to call class methods in the Model? (more inside)

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

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();

如果是这样,我将如何编写模型方法以允许进行此类调用?

这有两个方面。有 MVC 模式 然后有 ASP.NET MVC,框架,它或多或少地实现了 MVC 模式。

在MVC中,Model是所有业务逻辑的避风港。但是,ASP.NET MVC 并没有真正的模型概念。通常称为 "Models" 的 classes 实际上只是实体,即与数据库表相关联的 POCO。这些都是 MVC 样式模型的糟糕借口,这就是为什么大多数开发人员用另外两个概念来补充它们:视图模型和数据访问层或 DAL。

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

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

这三者(实体、视图模型和 repositories/services)共同构成了 MVC 模型。