Понятие «запах кода» и его противоположность, «чистый код», восходит к Мартину Фаулеру и Роберту Мартину, см. В этом посте нюансы обонятельных, гигиенических и моральных сравнений в области разработки программного обеспечения.
Что касается вопроса, то ваше мнение о том, что этот тип переключения между перечислениями воняет, согласуется с Мартином Фаулером в оригинальной редакции " Рефакторинг: улучшениеДизайн существующего кода", но он отозвал его в 2015 издание . Нет единого мнения по этому поводу, в том числе среди нескольких авторов репутации в 100K, например, @ tim-biegeleisen заявляет, что вони нет, @ mark-seemann настаивает на том, что есть , также после 2015 года, и обязательно так долгопоскольку вселенная существует, в соответствии с его склонностью.
Что касается претензии, которую вы испытываете к этому конкретному куску кода, вы можете перенести создание экземпляра в сам Enum, избегая, таким образом, оператора switch и также забываядобавить дополнительные ветви переключателей, когда вы увеличиваете перечисление.
public enum AnimalEnum {
Cat(Cat::new),
Dog(Dog::new),
Cow(Cow::new),
Rooster(Rooster::new);
private final Supplier<Animal> createAnimal;
public Animal createInstance() {
return createAnimal.get();
}
AnimalEnum(Supplier<Animal> factory) {
this.createAnimal = factory;
}
}
Предполагая, что это предложение вызовет противоречия, основанные на расположении отдельных обонятельных органов и сосредоточенные вокруг вонючей / чистой дихотомии, которую я хотел бы сослаться на этот пост , посвященный исключительновопрос, могут ли функции членов перечислений раздражать наши носы оправданным образом или нет.