Когда использовать общие экземпляры, а не просто использовать ключевое слово «new» - PullRequest
0 голосов
/ 06 июня 2019

Я думал о наличии нескольких элементов страницы и создании вкладок с помощью PageFactory. Тогда я понял, что было бы лучше не печатать все типы, которые я хочу, так как я просто хочу получить экземпляр. Затем я создал что-то следующее:

    public static T GetInstance<T>() where T:IPage, new()
    {
        return new T();
    }

Но дело в том, что я могу просто создавать свои страницы, например new WelcomePage(); вместо PageFactory.GetInstance<WelcomePage>(), и для меня не имеет смысла использовать подобный общий метод. Но я вижу, что раньше это использовали.

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

1 Ответ

0 голосов
/ 06 июня 2019

Учитывая, что это статический метод, я не вижу преимуществ по сравнению с new, за исключением использования GetInstance в других универсальных методах.(Нестатическая фабрика, как часть интерфейса или класса абстракций и с более чем 1 реализацией, получила бы больше смысла, поскольку клиент не зависел бы от конкретной фабрики, или, например, в тестах могла бы использоваться другая фабрика, чем в производстве).

Я бы предпочел new, потому что:

  • это сразу понятно и не требует дополнительного изучения деталей реализации GetInstance
  • что GetInstance<T> является родовым, а ограничения конструктора на дженерики ограничены конструктором без параметров new (), это подразумевает, что зависимости будут вводиться в T объект через свойства или окружающее окружение, ни одно из которых не является идеальным.Внедрение зависимостей через конструктор намного лучше.
...