代码之家  ›  专栏  ›  技术社区  ›  Tj Kellie

这个只包含静态方法的物理集合类是反模式的吗?

  •  2
  • Tj Kellie  · 技术社区  · 14 年前

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

    我从一个通用的列表基中得到了一组集合类。这些类具有公共构造函数,但只包含返回集合的静态方法。它们看起来像这样:

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

    这是一个模式还是反模式?与直工厂模式相比,这有什么优点?

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   TheFogger    14 年前

    UserObjCollection不向添加任何内容 BaseCollection<UserObj> ,这两个类的对象是相同的,功能性的。最好把它移走 UserObjCollection GetAllUserObj() 在里面 BaseCollection<T> (工厂方法)。你也可以把 获取alluserobj() 在单独的静态类中。我不认为抽象工厂模式在这里是必要的,因为您没有创建不同的对象族。

    我为什么要搬走 用户对象集合 因为这个类可能会导致其他开发人员不经过思考就添加到其中。如果后来发现 用户对象集合 实际上与 BaseCollection用户对象 它保证一个单独的类,您可以重新添加 用户对象集合 然后。

        2
  •  1
  •   Grzenio    14 年前

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

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