在尝试提供可单元测试(使用 Moq)的抽象时,ConcurrentQueue<T>
我正在争论是否会失去使用框架ConcurrentQueue<T>
实现的好处,这取决于我如何创作抽象。
在以下代码清单中执行一项或另一项的含义是什么:
public abstract class MyMessageQueue1<T> : ConcurrentQueue<T>
{
public new virtual void Enqueue(T item)
{
base.Enqueue(item);
}
}
public class MyMessageQueue2<T>
{
private readonly ConcurrentQueue<T> _concurrentQueue =
new ConcurrentQueue<T>();
public virtual void Enqueue(T item)
{
_concurrentQueue.Enqueue(item);
}
}
在第一个实现 ( MyMessageQueue1
) 中,我隐藏了任何基类方法,以便在将调用传递给基类之前提供我的实现。
在第二个实现中,我将ConcurrentQueue<T>
内部包装起来,并在需要时将调用传递给它。
是否MyMessageQueue2
必须手动处理并发,或者因为所有调用都传递给被包装的ConcurrentQueue<T>
.