c# - 我应该将验证逻辑放在 POCO 中吗?

标签 c# asp.net-mvc validation poco

假设我有一个像这样的 POCO:

public class Name
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

名字和姓氏不能为空。我应该添加这样的方法吗:

public List<Error> Validate()
{
    var errors = new List<Error>();

    if (String.IsNullOrEmpty(FirstName))
        errors.Add(new Error("FirstName", "You must fill out first name."));
    if (String.IsNullOrEmpty(LastName))
        errors.Add(new Error("LastName", "You must fill out last name."));
}

其中 Error 是一个包含 NameValueDictionary 的结构。这是做事的好方法吗?我可能会看到存储库存在问题,有人试图保存此 POCO 而没有先通过 Validate() 运行它。

最佳答案

我不会。我的 POCO 倾向于根据其上下文进行不同的验证。 “我的 Person 对象必须在这个应用程序中有一个地址,但在另一个应用程序中它们只需要有一个电话号码”......是那种你想要关注并灵活处理的事情。

我是贫血领域模型的拥护者,因为我通常会重复使用相同的领域,但会根据上下文(甚至可能是同一应用程序的不同区域)分配不同的行为和验证。

在实现新功能时,我通常会查看我的类并问自己这个问题:这看起来像是这个类的职责,还是更适合具有不同职责集的类?我们将这种检查称为“特征羡慕”,它有效地帮助区分类关心和不关心的内容。

关于c# - 我应该将验证逻辑放在 POCO 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1479765/

相关文章:

javascript - 正则表达式验证范围内的日期年份

c# - 如何访问 WinUI Generic.xaml 文件?

c# - 在 Delphi 和/或 C# 中录制/捕获和播放声音的好的 API 是什么?

asp.net-mvc - 与Razor捆绑在一起时,Dockerized的ASP.NET MVC5引发COMException

jquery - 获取文本框 jquery 中的删除和粘贴事件

java - 更改字段错误颜色?

c# - 如何使用 System.Security.Cryptography 生成随机 int 值

c# - 在 .net 中读/写雅虎日历(测试版)

asp.net-mvc - 具有应用内授权的 OWIN WsFederation 身份验证

html - 我可以在 <li> 周围的 <ul> 中使用 <a> 吗