如何改进此存储库设计
本文关键字:存储 何改进 | 更新日期: 2023-09-27 18:29:44
在我目前的设计中,我创建了一个由字典组成的存储库,在那里你可以将几个名为Foo的对象设置为一个级别(Easy、Medium和Hard)。即
- 简单级别:Foo1对象、Foo2对象、Foo3对象
- 中级:Foo4对象
- 级别硬:Foo5对象,Foo6对象
这是我的存储库:
public interface IFoosRepository
{
void AddFooLevel(Levels level, Foo foo);
void RemoveFooLevel(Levels level);
Foo GetProblemFoo(Levels level);
IEnumerable<Levels> GetFooLevels();
IEnumerable<Foo> GetFoos();
}
public class FoosRepository : IFoosRepository
{
private IFoosService service;
private Dictionary<Levels, Foo> _fooLevels = new Dictionary<Levels, Foo>();
public FoosRepository()
: this(new FoosService())
{
}
public FoosRepository(IFoosService service)
{
this.service = service;
// Loads data into the _fooLevels
// ...
}
public void AddFooLevel(Levels level, Foo foo)
{
_FooLevels.Add(level, foo);
}
public void RemoveFooLevel(Levels level)
{
_FooLevels.Remove(level);
}
public Foo GetProblemFoo(Levels level)
{
return _FooLevels[level];
}
public IEnumerable<Levels> GetFooLevels()
{
return _FooLevels.Keys;
}
public IEnumerable<Foo> GetFoos()
{
return _FooLevels.Values;
}
}
然后,我意识到另一件事,我需要有一个uniqueId,就像foos对象的名称一样。例如,如果我想从一个级别获得一个特定的对象,我需要设置名称来获得它
现在对象是这样的:
- 简易级别:[名称:foo1,foo1对象],[名称:foo2,foo2对象],【名称:foo3,foo3对象】
- 中级:[名称:foo4,foo4对象]
- 级别硬:[名称:foo5,foo5对象],[名称:foo7,Foo6对象]
我的意思是,每个名字都有一个唯一的名字,我想这个名字最好不要在另一个名字中重复。
这是我开始怀疑我的第一个设计的时候。我的第一个想法是IDictionary>,或者也许我应该将这个id包含在Foo属性中,但我想这不是最好的解决方案。
我应该修改什么来实现这个新功能?
嵌套词典怎么样?字典(级别,字典(字符串,Foo))
如果不了解更多关于如何使用存储库的信息,很难说是肯定的,但嵌套字典似乎正是您想要的。例如,在FoosRepository
类中:
private IDictionary<Levels,IDictionary<string,Foo> _foos = new Dictionary<Levels,IDictionary<string,Foo>>;
然后,例如,您的AddFooLevel
将变为:
public AddFooLevel( Levels level, string name, Foo foo ) {
IDictionary<string,Foo> level = null;
if( _foos.ContainsKey( level ) ) {
level = _foos[level];
} else {
level = new Dictionary<string,Foo>();
_foos.Add( level );
}
level.Add( name, foo );
}