- 1
- 2
// 13512 строк
public class UIComponent extends FlexSprite implements IAutomationObject, IChildList, IConstraintClient, IDeferredInstantiationUIComponent, IFlexDisplayObject, IFlexModule, IInvalidating, ILayoutManagerClient, IPropertyChangeNotifier, IRepeaterClient, IStateClient, IAdvancedStyleClient, IToolTipManagerClient, IUIComponent, IValidatorListener, IVisualElement
это аспектно-ориентированное программирование
если код получается некрасивым, то в этом виноват ты, программист, а не язык и не инструменты
то есть, например, в данном случае тоже с первого взгляда можно было бы развести руками - мол, ну что поделать, если компонент такой универсальный?
а выходов всегда много. в данном случае:
1. хреновое проектирование. Действительно ли нам нужны именно столько и таких интерфейсов?
2. хреновая реализация. Допустим, все интерфейсы нужны. Но неужто нельзя было их сгруппировать по иерархии, наделать базовых классов с длинным наследованием?
"Умение героически преодолевать трудности, которые создает твой собственный инструмент..."
Т.е. интерфейсы накапливались по мере развития проекта. За каждым из них вполне может стоят история недоисправленных багов и недореализованых улучшений. Кроме всего прочего - это не самая современная версия этого класса. И у некоторых интерфейсов там уже начинают циферки появлятся. Типа StyleManager2, LayoutManager2 и т.п.
А как обычно: -Нам нужно сделать новую крутую хрень! -Круто, а что это будет за хрень?Как мы ее сделаем? -Ээээ, вот у нас уже есть наша старая крутая хрень, давайте сделаем как там! -Да!
в результате кашу того, что было, приправили новой приправой, и запутались еще больше, чем с первой хренью.
А все потому, что, как обычно, не задавали постоянно вопросом "а зачем нам это? действительно ли оно нам надо?"