Звучит как Аллен Голуб. Можно утверждать, что конструкторы злые исключительно для привлечения веб-трафика :) Они не более злые, чем любая другая языковая конструкция. У них есть хорошие и плохие последствия. Конечно, вы не можете их устранить - нет способа построить объекты без них!
Что вы можете сделать, однако, и это тот случай, который делал Аллен, так это то, что вы можете ограничить свой фактический вызов их и вместо этого отдавать предпочтение, когда это разумно, заводским методам, таким как Initialize
. Причина этого проста: она уменьшает связь между классами и упрощает замену одного класса другим во время тестирования или при развитии приложения.
Представьте, что ваше приложение выполняет что-то вроде
DatabaseConnection dc = new OracleDatabaseConnection(connectionString);
dc.query("...");
и представьте, что это происходит в сотне мест в вашем приложении. Теперь, как вы тестируете модулем любой класс, который делает это? А что происходит, когда вы переходите на Mysql, чтобы сэкономить деньги?
Но если вы сделали это:
DatabaseConnection dc = DatabaseConnectionFactory.get(connectionString);
dc.query("...");
Затем, чтобы обновить ваше приложение, вам просто нужно изменить то, что возвращает DatabaseConnectionFactory.get()
, и это можно контролировать с помощью файла конфигурации. Избегание явного использования конструкторов делает ваш код более гибким.
Редактировать: я не могу найти статью "конструкторы", но вот его extends - это зло one, а вот его добытчики и сеттеры - злые one.