Как стать автором
Обновить
11
0

Пользователь

Отправить сообщение
Этим и занимаюсь в рамках работы в компании. Про глобальную монетизацию пока что не думал, но благодарен за идею.
В примере несколько классов от огромного проекта, в рамках примера — выгляди может и вырвиглазно, но в рамках проекта — вполне приемлемо
Тотально согласен. Уже устал джунам объяснять про Clean Code… наделают 100 интерфейсов, а потом путаются сами… Зачем? — ну так в книге написали…
Ну по порядку.
«не раскрывать деталь реализации»

transformDateToString — не раскрывает РЕАЛИЗАЦИЮ
transformDateToStringUsingSimpleFormatter — а вот такой — уже лишнее

transformDate

само по себе не содержит контекста действия, трансформ как? зачем? во что? Такое имя было бы уместно только внутри класса ToStringUtils/ ToStringTransformer — так как тут уже класс является контекстом.

Опять же — имя должно быть лаконичным, но с учетом контекста. При нейминге я беру(стараюсь) одно из 2 правил:
1) это общепринятые и известные имена (i j для циклов и тд)
2) имя отражает логику / цель использования (с учетом контекста использования)
Планирую еще одну статью делать на следующей недел. Там буду поднимать тему DI. Сам же предпочитаю доработанную версию сервис локаторов. Если кратко, то там что-то вроде типизированных многоуровневых сервисов.
object ModuleNameServices : Services{
    val serviceX by services{ServiceX()} //cached
    val serviceY by services("key"){ServiceY()} //scoped
    val serviceZ get() = ServiceZ() //newInstance
    val serviceU = AnotherModuleService //ref
}

Сам же класс Services — под капотом хэшмеп для хранения скоуп и хэшированых сервисо + функции возвращающие делегаты (services), ну и для тестирования — ф-ция для моков (положить в хэш сервис) — обертки и тд.

А использую через конструктор
class SomeClass(services: Services = ModuleServices){
     val sX get()= services.serviceX  //   Вот тут важно get()=  - защити от рантайм модификации и статических ссылок
}

Плюс такого подхода — прямая связност кода (ктрл+клик и найти вожно всё), легко тестить, нереально запутаться, нету рантайм ошибок, нету кодгенерации.
Минус — не по клинархитектуре… нету интерфейсов и тд… хотя при желании можно и доработать

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность