Это шаблон создания фабричного метода? - PullRequest
43 голосов
/ 30 апреля 2009

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

public static class ScheduleTypeFactory
{
    public static IScheduleItem GetScheduleItem(ScheduleTypeEnum scheduleType)
    {
        IScheduleItem scheduleItem = null;

        switch (scheduleType)
        {
            case ScheduleTypeEnum.CableOnDemandScheduleTypeID:
                {
                    scheduleItem = new VODScheduleItem();
                    break;
                }
            case ScheduleTypeEnum.BroadbandScheduleTypeID:
                {
                    scheduleItem = new VODScheduleItem();
                    break;
                }
            case ScheduleTypeEnum.LinearCableScheduleTypeID:
                {
                    scheduleItem = new LinearScheduleItem();
                    break;
                }
            case ScheduleTypeEnum.MobileLinearScheduleTypeID:
                {
                    scheduleItem = new LinearScheduleItem();
                    break;
                }
        }

        return scheduleItem;
    }
}

не является шаблоном создания фабричного метода моим "техническим" лидерством, не говоря мне почему или не давая мне ее интерпретацию. Я любезно попросил объяснений, и она сказала мне, что у нее нет времени. Мне сказали просто переименовать его. Если я ошибаюсь, то, без сомнения, я признаю, что неправильно это реализовал годами. Это то, как ВЫ реализуете шаблон создания фабричного метода? Заранее спасибо.

Ответы [ 20 ]

4 голосов
/ 30 апреля 2009

Похоже, заводской шаблон для меня. Скажите своему техническому руководителю, что у вас нет времени, чтобы объяснить, почему она не права.

2 голосов
/ 30 апреля 2009

Это действительно «фабрика» в том смысле, что у вас есть метод, который возвращает конкретный экземпляр IScheduleItem на основе некоторой логики; однако, это, вероятно, не лучшая реализация или не самая удобная для обслуживания, учитывая, что вы используете оператор switch.

0 голосов
/ 29 октября 2010

Ваш Техник правильно переименовывает метод:

public static IScheduleItem GetScheduleItem(ScheduleTypeEnum scheduleType)

Действие метода не в том, чтобы получить что-то, а в создании чего-либо. Как вы решаете, какой тип расписания должен быть создан? Кажется, что логика должна быть инкапсулированным, а не выключателем типа.

Кроме того, почему статический в классе? Откуда вы это используете?

public class ScheduleTypeFactory
{
    public static IScheduleItem createScheduleFrom(ScheduleTypeEnum scheduleType)
    {

        switch (scheduleType)
        {
            case ScheduleTypeEnum.CableOnDemandScheduleTypeID:
            case ScheduleTypeEnum.BroadbandScheduleTypeID:
                 return new VODScheduleItem();
             case ScheduleTypeEnum.LinearCableScheduleTypeID:
             case ScheduleTypeEnum.MobileLinearScheduleTypeID:
                    return new LinearScheduleItem();
        }

       raise InvalidSchedule;
    }
}
0 голосов
/ 30 апреля 2009

Да, это заводская модель в порядке. Ваш технический руководитель не прав.

0 голосов
/ 30 апреля 2009

Выглядит как базовый шаблон для меня. Мне любопытно услышать, почему ваш технический руководитель не думает, что это шаблон.

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

0 голосов
/ 01 мая 2009

Самым простым объяснением фабричного шаблона, который я узнал из паттернов и учебного класса, было то, что если вы полагаетесь на другой класс для создания экземпляров своего класса, то вы используете фабричный паттерн.

Конечно, часто вы хотите добавить слой косвенности, делая ваш класс абстрактным или интерфейсом.

Это очень упрощенный вид, но в любом случае вы используете фабричный шаблон.

0 голосов
/ 30 апреля 2009

Это шаблон фабричного метода, по крайней мере, согласно Википедии: http://en.wikipedia.org/wiki/Factory_method_pattern

0 голосов
/ 30 апреля 2009

Вот учебник Фабричный шаблон.

Некоторые тексты называют это «Простыми фабричными паттернами», но я никогда не видел критериев, что означает «Простой».

В моей практике, Factory Pattern - это любое интеллектуальное создание ядра конкретного класса, соответствующего желаемому интерфейсу.

Но зачем бороться со своим техническим лидером, называя метод. Переименуй его, иди дальше с жизнью.

0 голосов
/ 30 апреля 2009

Заберите власть прямо сейчас! Просто удалите «Тип» из формулировки. Расписание завода FTW. Подождите, это фабрика для «Расписания» или «ScheduleItems»? Если это расписание, то фабрика должна называться ScheduleItemFactory. Будь выразительным !!!

0 голосов
/ 30 апреля 2009

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

Тот факт, что Википедия перечисляет ваш шаблон в качестве примера, показывает, что это правильно фабричный шаблон. Шаблоны были определены, чтобы обеспечить общий язык для общих решений, поэтому ясно, что если Википедия показывает это в качестве примера, это часть общего языка. Академическая дискуссия о том, что такое «фабричный шаблон», в каком-то абстрактном смысле упускает смысл паттернов.

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