我正在对某种类型的存储库进行原型设计,我想知道是否有足够的方法来运行序列 仅。
例如:
public void AddEntities<T>(IQueryable<T> sequence);
现在,这个方法原型看起来很好,并且非常泛型,但是当有人想做类似的事情时,它会很糟糕:
var t = new T();
// Add just a single entity.
repository.AddEntities(???);
此案例有哪些解决方案?
我应该将界面放大并添加AddSingleEntity<T>(T t)
和RemoveSingleEntity<T>(T t)
之类的方法,还是应该保留原样并使用以下内容:
repository.AddEntities(new List { new T() }.AsQueryable());
两种选择显然都有缺点:第一种选择使得界面更加丑陋而不那么紧凑,第二种看起来有点奇怪。
你会做什么以及为什么?
答案 0 :(得分:3)
我会创建其他方法来处理单个实体操作,因为它看起来更干净,并且有很多常见的接口(List)
编辑:如果我想只有一个方法组,我会怎么做:
public void Add<T>(IEnumerable<T> entities) { ... }
public void Add<T>(params T[] entities) { this.Add(entities.AsEnumerable()); }
您现在可以致电:
repo.Add(entity);
repo.Add(entity1, entity2);
repo.Add(entityList);
答案 1 :(得分:2)
为什么不添加repository.AddEntity(T t)
?简单又好看。看起来有点过分了。
答案 2 :(得分:2)
在这种特殊情况下,我不会使用IQueryable。这是一个查询。 阅读this有用的文章。发送数据时使用IEnumerable。