如何在内存存储库中实现保存

本文关键字:实现 保存 存储 内存 | 更新日期: 2023-09-27 17:56:52

>我有以下代码

foreach (var obj in MyList)
{
  // BL
  repository.Add(obj)
   // BL
  repository.Update(obj)
}

我有两个实现独立实体的类。一个类使用 MsSql,一个类使用内存中。内存中实现使用 List 来存储我的数据。如果我使用 MsSql 类,那么所有数据都已经存储在数据库中。如果我使用内存中,那么我需要在 foreach 循环后将存储库列表中的所有数据插入到数据库中。我不确定做这个 OOP 的最佳方法是什么。

我可以将 Save 方法添加到 IRepository,但这意味着 MsSql 类将实现它不需要的方法。另一种选择是仅在内存中类中添加方法并执行以下操作:

IRepository rep = repository as InMemoryRepository
if (rep != null)
{
    rep.Save()
}

你觉得怎么样?

如何在内存存储库中实现保存

您应该在基本接口中具有所有存储库实现(MSSQL,内存中)通用的方法。

SaveToDatabase 是一种非常特定于内存的方法,应该是内存存储库实现类的一部分。不要让它成为基本接口的一部分,因为它可能对其他具体实现没有任何意义。

另一种选择是实现内存中存储库的持久方法,以便将其保存在列表中以及保存在数据库中。(虽然这是混合的担忧)

public interface IRepository
{
 void Add(MyType object);
}
public class SqlRepository : IRepository
{
 public void Add(MyType object)
 {
  // saves to DB
 }
} 
public class InMemoryRepository : IRepository
{
 List<MyType> store = new List<MyType>();
 public void Add(MyType object)
 {
  // saves to list store.
  // may also, additionally store to DB.
  IRepository dbRep = DependencyInjection.GiveMeDatabaseRepository<IRepository>();
  // null check so that if tomorrow, there is no SQL repository, this code doesn't break.
  if (dbRep != null )
  {
   dbRep.Add(object);
  }
 }
 // this is another explicit option
 public void AddToDatabase(MyType object)
 {
   IRepository dbRep = DependencyInjection.GiveMeDatabaseRepository<IRepository>();
   dbRep.Add(object);
 }
}