- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新:请注意,我知道我不能这样做……这才是我真正希望能够奏效的。也许还有其他方法可以分离责任,不是吗?所以我要找的是...
Entity Framework 将多重职责强加到类中(常规逻辑、基本注解和 CRUD 接口(interface)能力)。我只想把通常所有的东西都放在一个类中……并通过 Entity Framework 和常规逻辑将类的持久能力分开。
我的思考过程:最近我开始接触 Entity Framework,但不喜欢某些 Entity 类做得太多的想法。逻辑、数据访问接口(interface)和 Entity Framework 注释。为了解决这个问题,我想让我的实体类文件部分化,并在类的其他方面实现数据访问功能。这很好用而且非常干净!
当我这样做时,我认为将我的属性设为部分属性并使实现远离 EF 属性注释会非常有益!!这将清除文件并允许单一责任。但是,这是不允许的!真可惜。
部分属性将像部分方法一样实现。一个部分属性中的定义,以及另一个部分属性中的实现......就像顶部链接中的照片建议(或评论)和下面的代码一样。
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);
}
}
}
然后是另一个处理所有抽象数据库项的部分类...
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(); }
}
现在,我必须将注释和逻辑结合在一起。这有点奇怪,因为我已经分离出抽象数据库项目...除了 EF 注释!
最佳答案
没有 partial
属性的部分原因是它们不符合 partial
成员的基本设计理念。目标是简单地定义一个代码生成器可以在需要时插入额外逻辑的 stub 。如果生成的代码没有填写方法,那么所有对 partial
stub 的调用都将从最终程序中删除。
为了实现这个目标,partial
方法有一些非常有限的限制,包括它必须返回 void
。这使得它很容易被编译掉,因为如果它被删除,就没有任何值(value)可以保留
SomePartialMethod();
另一方面,属性永远不能是 void
,它们必须是某种具体类型。因此用户可以随时编写以下内容
string x = SomePartialProperty;
编译器不可能完全抹掉这个。此表达式必须为 x
分配一些值,否则程序根本无法编译。为了使这项工作正常进行,编译器可能必须为 x
选择一个合适的默认值。它当然可以做到这一点,(比如 default(T)
但我想这是决定不具有此功能的一个因素。
关于c# - 我发现部分方法非常有用,但没有部分属性。他们没有被包括在内有充分的理由吗?我有什么选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18372233/
您好,我希望我的下一个输出(在本例中就是字母)在上一个输出之后输出 8 个空格。这适用于第一个字符,但之后的 printf 语句不起作用。它在第一个 printf 语句之后立即打印,我试图将其设置为
我想知道制作 std::list<>::splice 背后的基本原理是什么使引用被拼接到新容器中的子序列的迭代器无效。这对我来说有点不合逻辑,尤其是考虑到标准 std::container::swap
谁能告诉我为什么我应该使用 Azure Function 输出绑定(bind)(例如 SendGrid 或 Twilio)而不是仅仅在我的 C# 函数中显式使用适当的 SDK(例如 Sendgrid
我们在当前项目中使用 React 和 TypeScript,我遇到了以下行为。 import React, { Component } from 'react'; 我将上面的行替换为下面的行,因为它似
我是一名优秀的程序员,十分优秀!