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