c# - 存储库模式 : Add Item

标签 c# repository domain-driven-design

只需要弄清楚这一点,如果我有下面的界面

public interface IRepository<T>
{
    T Add(T entity);
}

在实现它时,如果实体已经存在,是否在持久化之前检查重复,它仍然是存储库的工作,还是应该在其他地方处理一些事情?

最佳答案

是的 - 我建议在存储库中进行这些检查。

长答案:术语“存储库”有点含糊,但它越来越多地用作持久性抽象层的名称。名字很好听,但并不过分:如果以 Asp.Net MVC 为例,示例应用程序(如 Neirds dinner 等)或 codeplex 项目封装了存储库类的数据访问。例如,如果使用关系数据库实现此类层,则表的主键将不允许重复条目,这意味着在这种情况下,如果插入具有相同键的 2 个条目,则存储库实现将抛出异常。所以换句话说,存储库的 RDBMS 实现总是会进行此检查,您将无法避免它。因此,为了使世界上存储库的行为最相似并避免意外,让所有存储库都进行此检查。

第二个问题是您是否应该在业务逻辑中维护您的 Add() 方法未与已存在的条目相关联。有时,由于并发问题或节省往返次数,仅在单点(例如数据库)解决此问题很有意义。另一方面,最好尽快告诉用户用户名已被占用。所以这取决于。

祝你有个愉快的一天

关于c# - 存储库模式 : Add Item,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2815188/

相关文章:

c# - 替换 c# 中的 try...catch block

C# Entity Framework 核心条件投影

orm - 奇怪的错误 : [Semantical Error] line 0, col 75 靠近 'submit' :错误: 'submit' 未定义

design-patterns - 域对象封装 : static methods vs Service classes

elasticsearch - CQRS:在 ElasticSearch 读取模型中项目乱序通知

c# - MVC- View 未将模型列表值传递回 Controller

c# - 可以(错误地)使用 Exception.HelpLink 来识别 Exception 对象吗?

Java Spring : How to see how many entities/rows are affected by a repository.删除方法?

.net - 通用存储库。需要建议

database - 如何正确实现存储库模式?