Здравствуйте, IT, Вы писали:
IT>Здравствуйте, AlexNek, Вы писали:
IT>>> А всё же какие практические задачи решаются?
AN>>Относительно простые задачи "с ньюансами". Есть MDI окошко и есть набор комманд, которые запускаются по выбору пользователя (типа прочитать/записать данные), при выполнении комманд требуется отобразить прогресс бар и текущий/конечный статус, а также отобразить прочитанные данные. Может приходить различный набор данных и каждый элемент данных имеет свой статус. При этом данные могут считываться с различных источников при этом отображение будет несколько разным. Ну так вроде, вкратце.
IT>Это описание задачи в целом. Здесь не видны конкретные проблемы и решения именно этих проблем посредством интерфейсов.
Всю конкретику будет тяжело перечислить. Попробую просто немного подробней рассказать, что именно сделано с точки зрения "картинки" и только "отображения"
Есть МДИ форма. На ней панелька с кнопочками (как бы Таб элемент) для выбора 6 суб-панелей.
На каждой суб-панели располагается некоторое количество строк (текст-название, текст-значение, картинка-состояние данных). Количество строк может менятся в зависимости от входных данных, некоторые строки могут объединятся в группы с дополнительным заголовком. Все три части: название, значение и состояние "вычисляются" в зависимости от конкретных данных. Строк может быть больше чем помещается на высоту экрана.
Чел просто взял Лабел, Едит и Картинку ну и повставлял их динамически на панель по строкам. От каждого контрола наследовался свой класс с дополнительной функциональностью. (Для доп. функциональности вполне можно было взять интерфейс), но ему еще хотелось, что-бы множество методов стандартного контрола не "было видно", а были видны только те что разрешено иметь данной части строки, ну допустим, фоновый цвет разрешено иметь только текст-значению. Эти же объекты он хотел и напрямую закидывать в панель.
Попутно было еще решено существенно "усовершенствовать" interface-based-programming.
IT>А может таких проблем и нет вовсе? Тогда зачем нужны все эти интерфейсы?
В том то и дело, что нужность именно надуманная, по моему мнению. Дело еще в том что грид в его первозданном виде было запрещено использовать (пользователи компьютеров можно сказать не видели) и он не позволял сделать все что хотелось. Мне только удалось отстоять проперти грид для ввода данных и то только из-за сроков.
IT>>>Он проще в мильён раз. Но это становится понятно только если о нём рассуждать не теоретически, а работать с ним практически.
AN>>Тут проблема видимо кто автор. Если просто смотреть код, то будет также проблематично, если концепт не расскажут.
IT>Это очень легко проверяется при изменении функциональности и фиксе всяких багов. Например, чтобы сделать какое-нибудь мелкое изменение, вроде протяжки дополнительного поля на форму никаких особых концептов знать не нужно.
В данном случае нужно разобраться как вообще у него все работает, все поля закидываются динамически. Нужно найти где они создаются, как им передаются данные и как они эти данные могут обрабатывать. Причем если "спросить решарпера" где используется данный конкретный класс в большинстве случаев получится "нигде", так как многие классы создаются через Активатор.
IT>Нужно просто сесть и разобраться что откуда берётся и куда девается. С нормальным дизайном с этой работой справится любой вменяемый разработчик за разумное время. При таком переусложнённом дизайне это может оказаться проблемой для самого автора.
Вот именно это мне и не удалось доказать. Говорилось — нефиг делать. Можно выполнить практически любой чих и именно из-за наличия интерфейсов на все случаи жизни.
IT>>>Например, при работе с моим ООП кодом мне достаточно одного нажатия кнопки F12, чтобы от вызова функции перейти к её реализации и посмотреть что там и как.
AN>>Это если в отладчике знаешь где точку останова поставить. А так нужно найти вначале соответствующую команду.
IT>Это как раз можно делать без отладчика. Изучая код я обычно смотрю не только на текущий метод, но и на то, что он вызывает. И вот тут могут быть определённые проблемы.
Скорее всего будут проблемы, когда количество строк переваливает за сотни тысяч и вызывается виртуальный метод. И только часами отладки можно найти, что допустим, впереди числа не отображается нолик только из-за того что в параметрах атрибута поля в базовом классе "3-мя уровнями ниже" не так задали маску отображения.