У меня есть код, который я хочу реорганизовать. У меня есть много методов, которые принимают несколько аргументов одного типа, например:Обтекание булевых объектов в объектах
public void foo(String name, String street, boolean b1, boolean b2) { ... }
и так далее. Поскольку разные объекты могут различаться только по имени, я хотел бы их обернуть в Object (Enums), чтобы я мог использовать тип системы языка (Java в этом случае).
public class Name {
private String value;
public String getValue() { return value; }
// ...
}
Нравится программа? Поделись с друзьями! Это будет гарантировать, что он не будет случайно перепутать порядок параметров методы и, таким образом, не производит неожиданное поведение во время выполнения:
foo(new Name("John"), new Street("Broadway"), new B1(true), new B2(false);
Это делает рефакторинга намного безопаснее, вы можете нести объект через система, если вы хотите, данные внутри нее, строка всегда безопасна. Только когда вам это нужно, вы получите его, вызвав getValue().
Теперь, для объектов, которые обруч строка, это довольно просто, так как есть множество состояний экземпляры могут быть.
Но как насчет логических оберток? Это либо ИСТИНА, либо ЛОЖЬ. Реализация выглядит просто, ну, немного смешно:
public enum Quanto {
YES() {
protected boolean isQuanto() {
return true;
}
},
NO() {
protected boolean isQuanto() {
return false;
}
};
protected abstract boolean isQuanto();
}
Даже незнакомец я считаю, что вызывающий код выглядит следующим образом:
public void doStuff(Quanto quanto) {
if(quanto.isQuanto()) {
// ...
}
}
Технически это не имеет значения, конечно, но это просто не чувствую себя хорошо ... Вы нашли «лучшие» способы борьбы с этим?
EDIT: Что же неугодно меня является тот факт, что есть больше значения, чем мыслимое ДА и NO в приведенном выше примере, скажем MayBe ...?!
Спасибо!
Ваш код делает это из этого анти-шаблона: http://www.martinfowler.com/bliki/AnemicDomainModel.html – SteveD
В принципе, он очень процедурный и не очень объектно-ориентированный. – SteveD
Это не обязательно плохо ... – me22