C# 在何处放置模型的检查功能(asp.net mvc5)

C# 在何处放置模型的检查功能(asp.net mvc5),c#,asp.net-mvc,asp.net-mvc-5,C#,Asp.net Mvc,Asp.net Mvc 5,我知道模型不应该有任何逻辑,但我不知道在哪里可以放置特定模型的检查或更新函数 前 公共类留言簿 { 公共整数货币{get;set;} [必需] 公共字符串名称{get;set;} [必需] 公共字符串电子邮件{get;set;} 公共日期时间内容{get;set;} 公共图书馆 { 如果(this.money遵循良好的OOP设计原则,那么真正保护类的不变量(并且不存在可维护性噩梦)的唯一方法是不允许类以外的任何人更改它们。通常,这是通过不公开公共setter方法()来实现的,使字段成为只读的(只

我知道模型不应该有任何逻辑,但我不知道在哪里可以放置特定模型的检查或更新函数

公共类留言簿
{
公共整数货币{get;set;}
[必需]
公共字符串名称{get;set;}
[必需]
公共字符串电子邮件{get;set;}
公共日期时间内容{get;set;}
公共图书馆
{

如果(this.money遵循良好的OOP设计原则,那么真正保护类的不变量(并且不存在可维护性噩梦)的唯一方法是不允许类以外的任何人更改它们。通常,这是通过不公开公共setter方法()来实现的,使字段
成为只读的
(只要可能),并从构造函数初始化它们

拥有类的全部意义在于用行为对数据进行分组。包含int和string的简单数据结构不是OOP意义上的类,它只是一个结构


在某些情况下,您会遇到一个更为邪恶的ORM,它迫使您将所有属性公开。这不是实体框架(以及其他一些实体框架)的问题虽然,如果需要,EF可以神奇地反映并访问私有setter,但您只需确保还有一个私有的默认构造函数。

根据您的类,rich方法正在验证,而earn方法正在应用业务逻辑。您可以为c对ModelState.IsValid的攻击是有效的,对于earn方法,您需要创建应用所有业务逻辑的BO类。
这里是一个关于AdditionalMetadataAttribute的类

,我认为您需要使用业务逻辑创建类,该类将包含这些方法,您可以从控制器调用它们。“我知道模型不应该有任何逻辑”谁告诉你的?在OOP中,模型封装规则和内部工作有其特殊的原因。如果你的“模型”不是真正的类,只是属性包,你有一个贫血的域模型@kai point很好。如果我是对的,你使用的是代码优先的方法。你也可以在fluent API中使用这种验证:)@vinodh是的,一般来说,我喜欢将问题域和业务逻辑视为我的应用程序的核心。在这种情况下,数据库虽然重要,但主要是外围设备。从同样的意义上说,HTML视图或IoC容器不应该控制您的业务规则,数据库也不应该。业务的核心取决于我们的类运行正常,所以我喜欢保持该部分干净,并与外部系统分离。
public class GuestBook
    {

        public int money { get; set; }
        [Required]
        public string name { get; set; }
        [Required]
        public string email { get; set; }
        public DateTime content { get; set; }
        public bool rich()
        {
            if (this.money <3000)
                return false;
            else
            return true;
        }
        public void earn(GuestBook b)
        {
            this.money += b.money;
        }
    }