在哪里放置模型的检查功能(asp.net mvc5)

时间:2015-12-16 09:02:23

标签: c# asp.net-mvc asp.net-mvc-5

我知道模型不应该有任何逻辑,但我不知道在哪里放置特定模型的检查或更新功能的好地方

离。

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;
        }
    }

函数rich()和earn()仅用于此模块(GuestBook) 如果我没有把它放在这个模块中,那么我应该放在哪里?

2 个答案:

答案 0 :(得分:0)

遵循良好的OOP设计原则,真正保护类不变量(并且没有可维护性的恶梦)的唯一方法是不允许除了类之外的任何人更改它们。通常,这是通过NOT公开setter方法(public auto properties are evil),使字段readonly(尽可能),并从构造函数初始化它们来完成的。

拥有类的重点是按行为对数据进行分组。包含整数和字符串的简单数据结构不是OOP意义上的类,它只是一个结构。

在某些情况下,你会遇到一个更邪恶的ORM,迫使你公开所有属性。这不是Entity Framework(以及其他一些)的问题,但如果需要,EF可以神奇地反映并访问私有设置器,您只需要确保还有一个私有默认构造函数。

答案 1 :(得分:0)

根据您的班级丰富方法验证,赚取方法正在应用业务逻辑。您可以为可以触发ModelState.IsValid的富方法逻辑创建AdditionalMetadataAttribute,并为创建需要创建应用所有业务逻辑的BO类所需的方法创建。 这里有一个link的AdditionalMetadataAttribute