我知道模型不应该有任何逻辑,但我不知道在哪里放置特定模型的检查或更新功能的好地方
离。
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) 如果我没有把它放在这个模块中,那么我应该放在哪里?
答案 0 :(得分:0)
遵循良好的OOP设计原则,真正保护类不变量(并且没有可维护性的恶梦)的唯一方法是不允许除了类之外的任何人更改它们。通常,这是通过NOT公开setter方法(public auto properties are evil),使字段readonly
(尽可能),并从构造函数初始化它们来完成的。
拥有类的重点是按行为对数据进行分组。包含整数和字符串的简单数据结构不是OOP意义上的类,它只是一个结构。
在某些情况下,你会遇到一个更邪恶的ORM,迫使你公开所有属性。这不是Entity Framework(以及其他一些)的问题,但如果需要,EF可以神奇地反映并访问私有设置器,您只需要确保还有一个私有默认构造函数。
答案 1 :(得分:0)
根据您的班级丰富方法验证,赚取方法正在应用业务逻辑。您可以为可以触发ModelState.IsValid的富方法逻辑创建AdditionalMetadataAttribute,并为创建需要创建应用所有业务逻辑的BO类所需的方法创建。 这里有一个link的AdditionalMetadataAttribute