А как сейчас с работой?
Вот только на этой неделе пытался выяснить что думали, когда один абстрактный класс и три подкласса делали, при этом половина кода в абстрактом выглядит как "если класс this-а подкласс А, то делай это, а если B - то другое". Почему в подклассах метод не переопределить? Спрашиваю чудака, который это наделал 4-5 лет назад. Что он мне говорит? Правильно "низнаю - непомню - кто-то сказал так делать - и вообще это не я - а чо, работает же?"
Хаха, как всё просто! У меня чтобы достать локализованную строку, идёт стек из 5-7 вызовов функций. И это не какие-то обращения к сторонним библиотекам, а код самого проекта. А строковые ресурсы глобальные - т.е. чего там вызывать в длиннющем стеке? А вот - менеджер вызывает адаптера, адаптер - фабрику, фабрика создаёт провайдера, провайдер вызывает другой менеджер и т.д. Всё дофига архитектурно - чай не лохи клепали.
А, ещё может я чего не понимаю, но там всё через интерфейсы сделано, включая создание объектов. Т.е. например менеджер вызывает адаптера, но возвращает объект как интерфейс адаптера, типа такого:
ILocalizationAdapter adapter = GetLocalizationAdapter(); // где этот метод тоже возвращает интерфейс
И этот объект adapter вызывает скажем функцию. Естественно, при клике на "go to definition" меня перебрасывает на метод интерфейса. И так по всей цепочке вызовов - интерфейс создаёт объект с типом другого интерфейса. А мне, ска, нужна реализация конкретного метода. Как попасть в нужную реализацию? Знаю только способ запустить приложение и в дебаге узнать конкретный тип. Но есть сложность - приложение имеет навороченный пайплан установки - просто так по F5 хрен запустишь. А после установки как подключиться дебаггером к нужному процессу, если это один из кучки мелких сайтов и сервисов, запущенных на веб-сервере? По идее можно отыскать и конкретный сервис, и его процесс (если он не в службах виндовс где-то захостен), но лять почему так сложно? Я проект с месяц фиксил, чтобы он только на моей машине ошибки компиляции выдавать перестал.
И юнет-тест хрен создашь - даже для вызова строки там куча объектов окружения, которые все надо тоже посоздавать.