Re[6]: NET:Интерфейсы против классов
От: AlexNek  
Дата: 17.11.11 22:54
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, AlexNek, Вы писали:


IT>>> А всё же какие практические задачи решаются?

AN>>Относительно простые задачи "с ньюансами". Есть MDI окошко и есть набор комманд, которые запускаются по выбору пользователя (типа прочитать/записать данные), при выполнении комманд требуется отобразить прогресс бар и текущий/конечный статус, а также отобразить прочитанные данные. Может приходить различный набор данных и каждый элемент данных имеет свой статус. При этом данные могут считываться с различных источников при этом отображение будет несколько разным. Ну так вроде, вкратце.

IT>Это описание задачи в целом. Здесь не видны конкретные проблемы и решения именно этих проблем посредством интерфейсов.

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

IT>А может таких проблем и нет вовсе? Тогда зачем нужны все эти интерфейсы?

В том то и дело, что нужность именно надуманная, по моему мнению. Дело еще в том что грид в его первозданном виде было запрещено использовать (пользователи компьютеров можно сказать не видели) и он не позволял сделать все что хотелось. Мне только удалось отстоять проперти грид для ввода данных и то только из-за сроков.
IT>>>Он проще в мильён раз. Но это становится понятно только если о нём рассуждать не теоретически, а работать с ним практически.
AN>>Тут проблема видимо кто автор. Если просто смотреть код, то будет также проблематично, если концепт не расскажут.

IT>Это очень легко проверяется при изменении функциональности и фиксе всяких багов. Например, чтобы сделать какое-нибудь мелкое изменение, вроде протяжки дополнительного поля на форму никаких особых концептов знать не нужно.

В данном случае нужно разобраться как вообще у него все работает, все поля закидываются динамически. Нужно найти где они создаются, как им передаются данные и как они эти данные могут обрабатывать. Причем если "спросить решарпера" где используется данный конкретный класс в большинстве случаев получится "нигде", так как многие классы создаются через Активатор.
IT>Нужно просто сесть и разобраться что откуда берётся и куда девается. С нормальным дизайном с этой работой справится любой вменяемый разработчик за разумное время. При таком переусложнённом дизайне это может оказаться проблемой для самого автора.
Вот именно это мне и не удалось доказать. Говорилось — нефиг делать. Можно выполнить практически любой чих и именно из-за наличия интерфейсов на все случаи жизни.
IT>>>Например, при работе с моим ООП кодом мне достаточно одного нажатия кнопки F12, чтобы от вызова функции перейти к её реализации и посмотреть что там и как.
AN>>Это если в отладчике знаешь где точку останова поставить. А так нужно найти вначале соответствующую команду.

IT>Это как раз можно делать без отладчика. Изучая код я обычно смотрю не только на текущий метод, но и на то, что он вызывает. И вот тут могут быть определённые проблемы.

Скорее всего будут проблемы, когда количество строк переваливает за сотни тысяч и вызывается виртуальный метод. И только часами отладки можно найти, что допустим, впереди числа не отображается нолик только из-за того что в параметрах атрибута поля в базовом классе "3-мя уровнями ниже" не так задали маску отображения.
Cообщение написано в << RSDN@Home 1.2.0 alpha 5-AN-R6 rev. 8461>>
Re[2]: NET:Интерфейсы против классов
От: A13x США  
Дата: 21.11.11 15:48
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>...

AVK>Ответ на исходный вопрос простой и сложный одновременно. Интерфейсы в 99% случаев применяют там, где необходимо изолировать публичные контракты какой то подсистемы. Собственно, все.

Ну пожалуй можно добавить —
1. при чтении кода пожалуй чуть проще разобраться если сущность, с которой работаешь представлена через интерфейс, и перейдя на определение интерфейса видишь аккуратное определение нескольких публичных методов без реализации.
2. подобный подход позволяет легче замокировать(застабить) предоставляемою функциональность (например через EasyMock на java).

Конечно такой подход — явный перебор, если применять бездумно для всего. Доменные сущности, например, я бы не стал описывать через интерфейсы.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.