Как назвать этот класс, единственная цель которого - сообщить о неудаче? - PullRequest
0 голосов
/ 03 июня 2010

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

class IConstructor {
    public:
        virtual void Update() = 0;
        virtual Status GetStatus() = 0;
        virtual int GetLastError() = 0;
};

Существует проблема с дизайном текущей системы - функции, которые создают классы IConstructor, часто выполняют дополнительную работу, которая также может давать сбой. В этот момент вместо получения конструктора, который может быть запрошен на предмет ошибки, возвращается указатель NULL.

Перестройка кода во избежание этого возможна, но отнимает много времени. Тем временем я решил создать класс конструктора, который мы создаем и возвращаем в случае ошибки, вместо указателя NULL:

class FailedConstructor : public IConstructor
    public:
        virtual void Update() {}
        virtual Status GetStatus() { return STATUS_ERROR; }
        virtual int GetLastError() { return m_errorCode; }
    private: int m_errorCode;
};

Все вышеперечисленное - это настройка для мирского вопроса: как назвать класс FailedConstructor? В нашей нынешней системе FailedConstructor будет означать «класс, который создает экземпляр Failed», а не «класс, который представляет неудачную попытку создать другой класс».

Мне кажется, его следует назвать одним из шаблонов проектирования, например Proxy или Adapter, но я не уверен, какой именно.

РЕДАКТИРОВАТЬ: Я должен дать понять, что я ищу ответ, который в идеале придерживается одного из шаблонов проектирования GoF или какого-либо другого устоявшегося соглашения об именовании для вещей такого рода .

Ответы [ 9 ]

5 голосов
/ 03 июня 2010

Чтобы ответить на ваш буквальный вопрос, я бы, вероятно, пошел с ConstructorFailure, так как он описывает событие сбоя.

Тем не менее, я бы, вероятно, пошел бы еще дальше и сделал бы его Exception, в этом случае ConstructorException звучит не слишком потертым Любая причина, по которой вы хотите вернуть это вместо того, чтобы выбросить?

3 голосов
/ 03 июня 2010

Я бы назвал его NullConstructor в соответствии с шаблоном нулевого объекта, который является шаблоном, который вы используете. Смотри http://en.wikipedia.org/wiki/Null_Object_pattern

2 голосов
/ 03 июня 2010

Брось исключение. Это если я правильно понимаю ваше описание и создание объекта IConstructor не выполняется асинхронно.

Хотя, если у вас нет доступных исключений, я бы назвал это ConstructorCreationError. Да, он передает режим сбоя, но, точнее, передает конкретную ошибку, которая произошла. Кроме того, наличие конструктора в качестве последнего слова для меня, кажется, дает неправильное значение, но вы также можете поставить «конструктор» в конце.

Вы также можете заменить глагол "Сотворение" на что-то вроде SpawnConstructorError, ConstructorGenerationError и, если вы поклонник доктора Шевалье, возможно, ErroneousConstructor.

1 голос
/ 03 июня 2010

Я бы выбрал DummyConstructor, потому что его единственная цель - симулировать действительный экземпляр Constructor, но он не реализует никакой реальной функциональности.

0 голосов
/ 03 июня 2010

Я бы предложил назвать этот класс FailedObjectConstructionHandler, который описывает, что делает класс.

0 голосов
/ 03 июня 2010

Почему бы не создать класс Failed для представления класса, который не прошел конструкцию, и перейти с FailedConstructor? Таким образом, наименование является последовательным.

0 голосов
/ 03 июня 2010

Я собираюсь пойти с чем-то основанным на комментарии Найла С. - FailedConstructorProxy. Кажется, что шаблон Proxy лучше всего подходит для этого класса; хотя вместо того, чтобы передавать вызовы метода объекту, он стоит и генерирует то, что мы хотели фактический конструктор для возврата.

(Если у кого-то есть более правильный ответ, опубликуйте его, и я отмечу его как принятый. Я все еще не уверен на 100%, что это правильное имя!)

0 голосов
/ 03 июня 2010

Если вы готовы потратить усилия на проверку возвращенного указателя на «FailureConstructor», я не вижу причин, почему вы не можете проверить его на NULL?

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

0 голосов
/ 03 июня 2010

FailureResponseConstructor

Вы не создаете ошибку, вы создаете ответ на ошибку. Таким образом, я думаю, что любой синоним «ответить» или «ответить» будет работать.

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