【问题标题】:Is there a design pattern for a repository that always returns a single object?是否存在始终返回单个对象的存储库的设计模式?
【发布时间】:2015-12-12 07:12:46
【问题描述】:

我正在开发一个应用程序,它将对象从另一个 API 转换为我自己的类型并返回。我已经通过许多存储库类公开了此功能,这些存储库类从我正在使用的 API 传递了一个 Document 对象。所有存储库类都基于以下接口。

public interface IRepository<T> where T : INamed
{
    void Add(T toAdd);
    T Get(string name);
    IDictionary<string, T> GetAll();
    ICollection<string> GetNames();
    void Update(T toUpdate);
    void Delete(string name);
}

其中INamed 只是强制实体具有Name 属性,因为每个实体都由Document 中的唯一名称标识。

public interface INamed
{
    string Name { get; set; }
}

但是,Document 还包含许多设置/属性对象,每个文档只有一个实例。因此,这些类型在文档中没有名称来识别它们。然而,我仍然想创建某种通用接口,用于从Document 获取/设置这些对象。

我想使用的简单界面如下。但我不喜欢在名称中使用“存储库”一词,因为这意味着我脑海中的项目集合。

public interface ISingleItemRepository<T>
{
    T Get();
    void Set(T item);
}

这看起来像其他一些名称不同的常见设计模式吗?

【问题讨论】:

  • “存储库”一词暗示了一个负责其他对象持久性的对象。我真的不会考虑是否出于某些业务原因,存储库在某种意义上是特定于您的文档存储库的。

标签: c# design-patterns repository-pattern ddd-repositories


【解决方案1】:

像 Unity 这样的 IoC 容器使用术语 Lifetime Manager 来表示此类事情(即 SingletonLifetimeManager)。不是一种模式,而是一种命名约定……

【讨论】:

    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2017-11-07
    • 2021-06-16
    • 1970-01-01
    相关资源
    最近更新 更多