При моделировании классов, что является предпочтительным способом инициализации:
- Конструкторы или
- Factory Методы
И каковы были бы соображения для использования любого из них?
В некоторых ситуациях я предпочитаю иметь метод factory, который возвращает null, если объект не может быть сконструирован. Это делает код аккуратным. Я могу просто проверить, не возвращает ли возвращаемое значение значение null, прежде чем принимать альтернативные действия, в отличие от того, чтобы исключить из конструктора исключение. (Мне лично не нравятся исключения)
Скажем, у меня есть конструктор класса, который ожидает значение id. Конструктор использует это значение для заполнения класса из базы данных. В случае, когда запись с указанным идентификатором не существует, конструктор генерирует исключение RecordNotFoundException. В этом случае мне придется заключить конструкцию всех таких классов в блок try..catch.
В отличие от этого, у меня может быть статический метод factory для тех классов, которые возвратят значение null, если запись не будет найдена.
Какой подход лучше в этом случае, конструктор или метод factory?