Является ли этот физический класс коллекции, который содержит только статические методы, Anti-Pattern? - PullRequest
2 голосов
/ 15 марта 2010

Я пытаюсь выяснить, должен ли я продолжить работу с текущим шаблоном в приложении, в котором я работаю, или преобразовать его в нечто другое.

У меня есть набор классов коллекций из общей базы 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 ]

2 голосов
/ 15 марта 2010

UserObjCollection ничего не добавляет к BaseCollection<UserObj>, объекты обоих классов идентичны, с точки зрения функциональности. Было бы лучше удалить UserObjCollection и поместить GetAllUserObj() в BaseCollection<T> (фабричный метод). Вы также можете поместить GetAllUserObj() в отдельный статический класс. Я не думаю, что здесь нужен абстрактный шаблон фабрики, поскольку вы не создаете разные семейства объектов.

Причина, по которой я бы удалил UserObjCollection, заключается в том, что этот класс может привести к тому, что другие разработчики добавят его, не продумав его до конца. Если позднее выясняется, что UserObjCollection на самом деле достаточно отличается от BaseCollection<UserObj> тем, что он требует отдельного класса, вы можете повторно добавить UserObjCollection тогда.

1 голос
/ 15 марта 2010

Я склонен вызывать этот шаблон фабричного метода (возможно, неправильно).

Поскольку в настоящее время я занимаюсь только тестовой разработкой, я стараюсь ее избегать, потому что ее очень сложно тестировать. В вашем статическом методе вы создаете много конкретных классов, поэтому вы не можете по-настоящему насмехаться над любым из этих объектов. Более того, вы не можете высмеивать и весь статический метод, что делает все классы достаточно тесно связанными. Прямые фабричные шаблоны, по крайней мере, позволят имитировать весь фабричный объект, что значительно упрощает тестирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...