我希望标题是对问题的描述,我在表述我要解决的问题时遇到了麻烦。
我正在使用 .NET Core 2.1
我在过去 5 年里使用 Python 后最近开始在 C# 商店工作,所以我的强类型 oop 有点生疏。这是我所拥有的以及我正在尝试做的事情:
我是一个基本存储库接口,它定义了数据库实体的基本 CRUD 功能:
public interface IRepository<TEntity, TPrimaryKey> where TEntity : class
{
TEntity FindById(TPrimaryKey id)
void Create(TEntity entity);
void Delete (TEntity entity);
}
我从这个接口继承来定义我的存储库类实现的接口:
interface IProductRepository : IRepository<Product, int>
{
void SomeProductRepoMethod(int someParam);
}
然后我在我的具体类中实现所有接口方法:
public class ProductRepository : IProductRepository
{
public Product FindById(int id)
{
// lookup
}
public void Create(Product product)
{
// save
}
public void SomeProductRepoMethod(int someParam)
{
// do product repository specific stuff
}
....
}
现在,我想做的很简单。我想补充的过载Create上IRepository接受一个IEnumerable的TEntity:
public interface IRepository<TEntity, TPrimaryKey> where TEntity : class
...
void Create(IEnumerable<TEntity> entities);
...
但是我想定义一次这个重载的实现:所以我想我可以制作一个抽象的基本存储库类来放置上述实现。我面临的问题是我不确定如何或者甚至我是否可以用我现在拥有的模型干净利落地做到这一点。我试图创建一个实现 的基类,但这意味着将类型参数传递给基类和接口:IRepository
public abstract class BaseRepository<TEntity, TPrimaryKey> : IRepository<TEntity, TPrimaryKey>
{
public abstract TEntity FindById(TPrimaryKey id);
public abstract void Create(TEntity entity);
public abstract void Delete(TEntity entity);
public void Create(IEnumerable<TEntity> entities)
{
foreach(TEntity entity in entities)
{
Create(entity);
}
}
}
然后在我的具体存储库中:
public class ProductRepository : BaseRepository<Product, int>, IProductRepository
{
public override Product FindById(int id)
{
// lookup
}
public override void Create(Product product)
{
// save
}
public void SomeProductRepoMethod(int someParam)
{
// do product repository specific stuff
}
....
}
这对我来说并不安静,因为我在IProductRepository和中都传递了相同类型的参数ProductRepository。我觉得我很接近但不在那里,我不确定这里的最佳实践方法是什么。如果有人可以建议一种方法,我将非常感谢您的反馈。为这篇文章的长度道歉,但我觉得我需要清楚地描述我想要做什么。谢谢!
一只甜甜圈
湖上湖
相关分类