Недавно я провел рефакторинг проекта среднего размера в Java, чтобы вернуться и добавить модульные тесты. Когда я понял, что такое издеваться над статуэтками и статикой, мне было больно, я наконец-то «получил» то, что читал о них все это время. (Я один из тех людей, которым нужно учиться на собственном опыте. Хорошо.)
Итак, теперь, когда я использую Spring для создания объектов и связывания их, я избавляюсь от static
ключевых слов влево и вправо. (Если бы я мог потенциально хотеть высмеивать это, это не совсем статично в том же смысле, что и Math.abs (), верно?) Дело в том, что я привык использовать static
для обозначения того, что метод не полагается на любом объекте состояния. Например:
//Before
import com.thirdparty.ThirdPartyLibrary.Thingy;
public class ThirdPartyLibraryWrapper {
public static Thingy newThingy(InputType input) {
new Thingy.Builder().withInput(input).alwaysFrobnicate().build();
}
}
//called as...
ThirdPartyLibraryWrapper.newThingy(input);
//After
public class ThirdPartyFactory {
public Thingy newThingy(InputType input) {
new Thingy.Builder().withInput(input).alwaysFrobnicate().build();
}
}
//called as...
thirdPartyFactoryInstance.newThingy(input);
Итак, вот где это становится раздражительным. Мне понравился старый способ, потому что заглавная буква говорила мне, что, как и Math.sin (x), ThirdPartyLibraryWrapper.newThingy (x) каждый раз делал одно и то же. Там нет состояния объекта, чтобы изменить, как объект делает то, что я прошу его сделать. Вот несколько возможных ответов, которые я рассматриваю.
- Никто другой не чувствует так, так что со мной что-то не так. Может быть, я просто не усвоил ОО-способ ведения дел! Может быть, я пишу на Java, но думаю на FORTRAN или что-то в этом роде. (Это было бы впечатляюще, так как я никогда не писал на Фортране.)
- Может быть, я использую статичность как своего рода прокси для неизменности в целях рассуждения о коде. При этом, какие подсказки я должен иметь в своем коде, чтобы кто-то пришел, чтобы поддержать его, чтобы знать, что является состоянием, а что нет?
- Возможно, это должно прийти бесплатно, если я выберу хорошие метафоры объекта? Например
thingyWrapper
, не похоже, что у него есть независимый от обернутого состояния состояние,Thingy
которое само может быть изменяемым. Точно так жеthingyFactory
звуки должны быть неизменными, но могут иметь разные стратегии, которые выбираются при создании.