C# 有人告诉我这是一种糟糕的编程实践,唐';我不知道为什么,持续的无知是错误的?

C# 有人告诉我这是一种糟糕的编程实践,唐';我不知道为什么,持续的无知是错误的?,c#,abstraction,persistent,C#,Abstraction,Persistent,我最近在我的另一个问题上发布了以下代码。请原谅部分属性,这是我想要做的事情,但不能 public partial class Agency : PropertyValidator, IAgency { private string _name; public partial string Name { get { return _name; } set { // PropertyValidator

我最近在我的另一个问题上发布了以下代码。请原谅部分属性,这是我
想要做的事情,但不能

public partial class Agency : PropertyValidator, IAgency
{
    private string _name;

    public partial string Name 
    {
        get { return _name; }
        set
        {
            // PropertyValidator stuff
            if (string.IsNullOrEmpty(value))
                AddErrorToProperty("Agency name must contain a reasonable alphanumeric value.");
            if (string.IsNullOrWhiteSpace(value))   
                AddErrorToProperty("Agency name cannot contain all spaces.");

            SetPropertyIfValid(ref _name, value);
        }
    }
}

…在其中,我有一条评论没有回复stackoverflow说

您可能想了解持久性无知,以及为什么让每个实体从IPersientEntity继承是一件“坏事”。



我以前从来没有听说过
持久性无知
,我不得不去查一下。事实证明我知道这个概念是什么,而不是术语。然而,我有点困惑,为什么我做的不好。

主要的问题是,你的班级现在有多个变化轴。如果您的业务模型发生更改,它可能会发生更改,并且由于数据库层的更改也会发生更改。这打破了“单一责任原则”

查找坚实的原则,这里是一个播客与罗伯特·马丁和斯科特·汉斯曼描述他们


主要问题是,您的类现在有多个变化轴。如果您的业务模型发生更改,它可能会发生更改,并且由于数据库层的更改也会发生更改。这打破了“单一责任原则”

查找坚实的原则,这里是一个播客与罗伯特·马丁和斯科特·汉斯曼描述他们


OK…有关**为什么**我对代码使用这种格式的更多信息,请查看此…实体框架将多重责任强制到类中(常规逻辑、基本注释和CRUD接口功能)。我只想把通常所有的东西都放在一个类中…并通过实体框架和常规逻辑分离类的持久性功能。我想要IPersistentEntity接口,因为我所有的主要实体都有DB接口功能…它们都有ID和CRUD支持。另外,在这个问题上,我还想将实体框架的注释与常规类逻辑分开……因为这是一个类似于DB的additionsEntity框架(我认为是4及以上?)支持POCO类,dbContext对象表示存储库+工作单元模式此链接向您展示了如何使用EF和POCO类进行数据访问我现在正在收听播客…我认为我的S和O在那里。我希望尽可能地模拟单个责任,因为EF强制执行多个责任(基本逻辑、ORM注释和CRUD支持),我认为它还实现了O(开-关原则)。我已经把可以改变很多的东西(可能的CRUD能力)和基本上保持不变的东西(实体的常规逻辑)分开了。到目前为止,一切似乎都很稳定-至少SOOK…有关**为什么**我对代码采用这种格式的更多信息,请查看此…实体框架将多种责任强制加入到类中(常规逻辑、基本注释和CRUD接口功能)。我只想把通常所有的东西都放在一个类中…并通过实体框架和常规逻辑分离类的持久性功能。我想要IPersistentEntity接口,因为我所有的主要实体都有DB接口功能…它们都有ID和CRUD支持。另外,在这个问题上,我还想将实体框架的注释与常规类逻辑分开……因为这是一个类似于DB的additionsEntity框架(我认为是4及以上?)支持POCO类,dbContext对象表示存储库+工作单元模式此链接向您展示了如何使用EF和POCO类进行数据访问我现在正在收听播客…我认为我的S和O在那里。我希望尽可能地模拟单个责任,因为EF强制执行多个责任(基本逻辑、ORM注释和CRUD支持),我认为它还实现了O(开-关原则)。我已经把可以改变很多的东西(可能的CRUD能力)和基本上保持不变的东西(实体的常规逻辑)分开了。到目前为止,一切似乎都很稳定——至少是这样
public partial class Agency : IPersitentEntity, IAgency
{       
    [Key]    // NOTE these Annotations are because of Entity Framework...nice separation! 
    public int ID { get; set; } // From IPersitentEntity

    [Required]
    [MinLength(3), MaxLength(50)]
    public partial string Name { get; set; } // IAgency NOTE this is not valid, but the 
                                             // separation is amazing!

    // From IPersitentEntity provide CRUD support
    public void Create() { throw new NotImplementedException(); }
    public void Retrieve(int id) { throw new NotImplementedException(); }
    public void Update(int id) { throw new NotImplementedException(); }
    public void Delete(int id) { throw new NotImplementedException(); }
}