Здравствуйте, IQuerist, Вы писали:
J>>>·>И какой тут смысл создавать инстанс UserService? Чем UserService.Save со статическим методом хуже?
J>>>Вообщем-то можно и статические методы исспользовать.
IQ>·>Зачем тогда классы вообще существуют?..
IQ>Чтобы упрощать структуру кода, там где это может быть полезно... не?
Если в классе все методы статические, то какая именно польза от класса? Можно просто использовать namespace или что-то подобное.
IQ>·>И ещё получается такой некий твой "class Settigs", который зависит от всего и все от него зависят.
IQ>·>Собственно IoC-контейнер позволяет этим хоть как-то рулить. Синглтоны однозначно в топку.
IQ> Старая история, IoC-контейнер выполняет роль статического конструктора, но адепты верят, что так они чем-то по особенному рулят.
Если выбирать между IoC-контейнером и signletones я однозначно выберу первое. Но простой DI лучше обоих.
IQ>·>Нет. Просто передаёшь всех менеджеров в конструкторе.
IQ>·>UserService(UserProfileManager, AcitvityManager, SomethingManager, ...)
IQ>·>Да, конструктор _может_ получиться с тучей аргументов, но зато сразу видно что именно требуется для функционирования данного класса, тебе не нужно читать код каждого отдельного метода чтобы выяснить а что же этот конкретный метод в этой ветке if-условия решил вытянуть из глобального Context.Current.
IQ>Это иллюзия, код каждого конкретного метода читать все равно придется
Для чего?
IQ>·>И, более того, это всё проверяется на этапе компиляции, все зависимости обеспечены, плюс IDE помогает с навигацией по коду, find usages, go to declaration и прочим.
IQ>А все остальные способы создания сервисов в коде на этапе компиляции не проверяются, зависимости не обеспечивают, а IDE будет намеренно мешать навигации по коду!
Конечно, когда конструктор вызывается через рефлекию — IDE ничем помочь не может. А уж если XML-кофиги вспомнить...
Синглтоны скрывают структуру зависимостей и порядок инициализации.
IQ>·>Далее, если у тебя таки получается класс у которого очень много зависимостей это сразу явно видно по его конструктору. Это просто значит что данный класс превращается в Универсальный Всемогутор (https://en.wikipedia.org/wiki/God_object) и требуется рефакторинг: пилишь компоненты по зависимостям так, чтобы уменьшить максимальную валентность графа зависимостей.
IQ>Какая красота, люди ведь не замечают, что полдня работают с одним файлом кол-во строк которого перевалило за несколько тыс. И что найти метод без средств студии уже просто нереально
В проекте где хотя бы за 5к файлов/классов так и есть.
IQ>А так — глянул конструктор и все понятно А то, что всю эту сервисную обвязку при рефакторинге скорее всего придется переносить во новые классы. Ну это фигня не упаримся.
В этом хотя бы IDE отлично помогает. В отличии от клубка синглтонов.
IQ>Нам работу компилятора выполнять не в тягость!
Какую работу компилятора ты собрался выполнять?