我们正在使用LINQ to SQL和MVP开发.NET 3.5 Windows Forms应用程序.我们有一个用于检索数据的DataRepository类:
public class DbUserRepository : IUserRepository
{
private IList<UserName> _users;
public IList<UserName> GetUserNames()
{
if (_users == null)
{
// retrieve _users from DB
}
return _users;
}
Run Code Online (Sandbox Code Playgroud)
为了在DBUserRepository的所有实例中缓存用户列表,我们将使用企业库的缓存应用程序块.
但它发生在我身上,难道我不能只让_users成为静态成员吗?出于某种原因,这似乎是一种"老派"的方式,但它确实有效.这样做有什么缺点吗?这被认为是糟糕的设计吗?
private static IList<UserName> _users;
Run Code Online (Sandbox Code Playgroud)
谢谢
jer*_*jvl 11
这样做的最大缺点正是由于static手段的原因; 虽然你可以有很多DbUserRepository对象,但它们总是只共享一个_users变量.这会导致问题:
如果您的应用程序变得多线程,并且您希望每个线程都有自己独特的用户存储库(无论这是否是一个问题取决于存储库在您的系统上下文中的含义)
对DbUserRepository类进行单元测试变得比较棘手,因为如果你在这个类上运行多个单元测试,它们将从测试到测试一起携带状态,这意味着测试运行变得依赖于顺序......这是非常不可取的