只需要弄清楚这一点,如果我有下面的界面
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/