【问题标题】:Why are buddy classes used for validation?为什么要使用伙伴类进行验证?
【发布时间】:2011-02-24 20:00:33
【问题描述】:

我很好奇为什么使用伙伴类来完成数据验证。考虑以下示例,其中MyEntity 是 Linq-to-SQL 或 Linq-to-Entities 实体,下面的类是增强实体的部分类。

[MetadataType(typeof(MyEntity.MyEntityMetadata))]
public partial class MyEntity
{
    private class MyEntityMetadata
    {
        [Required(ErrorMessage = "The title is required.")]
        public string Title { get; set; }
    }
}

为什么会这样设计?他们在设计DataAnnotations的时候,为什么会选择这种“伙伴模式”呢?为什么不直接将属性放在实体中?

【问题讨论】:

  • 我的理解是它可以让你将特性扩展到设计师之外。您会讨厌调整元属性只是让您的下一个设计师更新将它们全部清除。
  • 单一责任主体?

标签: c# .net data-annotations


【解决方案1】:

我认为这可以防止生成的实体覆盖自定义元数据信息。

【讨论】:

    【解决方案2】:

    原因很实用——在 linq-to-sql 和 linq-to-entities 中,代表类的代码在每次更新对象模型时都会重新生成。为了在发生这种情况时不覆盖注释,它们需要位于单独的“伙伴”类中。

    如果您在不同的上下文中使用数据注释 - 例如视图模型 - 那么它们可以继续原始类本身。

    【讨论】:

    • 我不知道属性可以直接放在数据类上,例如直接放在视图模型中。答案标记为其他详细信息。谢谢。
    • “伙伴模式” - 不是“模式”,只是为了避免肮脏。 MS 团队从来都不是伟大的设计。
    猜你喜欢
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多