这个物理集合类是否仅包含静态方法和反模式?

时间:2010-03-15 15:02:21

标签: c# design-patterns

我正在试图弄清楚我是否应该继续使用我正在使用的应用程序中的当前模式,或者将其重构为其他内容。

我有一组基于List的通用基础的集合类。这些类具有公共构造函数,但仅包含返回集合的静态方法。它们看起来像这样:

public class UserObjCollection : BaseCollection<UserObj>
{
  public static UserObjCollection GetAllUserObj()
  {
    UserObjCollection obj = new UserObjCollection();
    obj.MapObjects(new UserObjDataService().GetAllUserObj());
    return obj;
  }
}

这是一种模式还是反模式?这对于直接工厂模式有什么优点?

编辑:我倾向于删除这些物理集合,并将其静态方法移动到数据访问层(UserObjDataService)。有很多对象类型,所以我需要将代码保存在单独的位置,但它们几乎都在数据层中有1到1个工厂对象。

2 个答案:

答案 0 :(得分:2)

UserObjCollection不向BaseCollection<UserObj>添加任何内容,两个类的对象相同,功能明智。删除UserObjCollection并将GetAllUserObj()放入BaseCollection<T>(工厂方法)会更好。您还可以将GetAllUserObj()放在单独的静态类中。我不认为抽象工厂模式在这里是必要的,因为你没有创建不同的对象系列。

我之所以要删除UserObjCollection,是因为这个类可能会让其他开发人员在不考虑它的情况下添加它。如果后来证明UserObjCollection实际上与BaseCollection<UserObj>有足够的不同,它保证单独的类,则可以重新添加UserObjCollection

答案 1 :(得分:1)

我倾向于调用这种工厂方法模式(可能不正确)。

因为我现在只做测试驱动开发,所以我倾向于避免它,因为它很难测试。在静态方法中,您创建了许多具体的类,因此您无法真正模拟任何这些对象。此外,您也无法模拟整个静态方法,这使得所有类都紧密耦合。直工厂模式至少可以模拟整个工厂对象,这使得测试更加容易。