Здравствуйте, adontz, Вы писали:
A>Так уж и неправданному?
ООД должен ускоряя разработку программы не слишком тормозить исполнение.
A>Например у меня есть модель — географически даные. MapView рисует карту (Bitmap), а на ней города (List<Town>) и пути по которым двигались автомобили и есть TownsView который выводит в столбик список городов. Если изменились пути движения автомобилей, то TownsView на это глубоко наплевать. И уж точно не стоит передавать туда новые пути.
Ты пристал к IView как универсальному интерфейсу который должен решить все твои проблемы, и дал ему очень сложную задачу. Так не бывает. Если с TownsView все понятно, то как MapView так и контроллеры к нему выразить в одном классе не удастся.

Тут присутсвует библиотека классов. как со стороны вьюв, так и со стороны контроллеров. Вполне понятно почему нельзя делать все в одной форме. Ты потеряешь композиционность. Если ты вделаешь сразу и рисование битмапа, обработку координат и рисование машин, рисование путей — то это будет монстр похожий на мусорку. А если еще обяжут рисовать только автобусы, или только трамваи и именно в виде трамвая? Поэтому декомпозируем по тому что именно нам нужно отобразить. Это будет рисование карты, рисование пути, рисование обычной машины и рисование допустим трамвая. Рисование машины и трамвая можно было бы совместить, так как отличаются только иконкой. Но тут встает вопрос, что для трамвая нужны рельсы, а это не совсем обычный путь. Поэтому разделяем на функции обработки где нужно рисовать, и как рисовать. То есть контроллер и вьюв. Соответвсенно, где рисовать решает некоторый набор классов контроллеров который зависит от того, что мы рисуем. И что удивительно, связь между контроллерами и классами рисования можно описать элементарными интерфейсами. Допустим. Для путей (как простого для машин, так и для электричества с рельсами для трамваев) важны массив точек для интраполяции. Допустим они наследуются от IArrayPointsPainter. Для машин и трамваев важна иконка и месторасположение — ICarPointPainter. Для городов месторасположение и название ICityPainter. Для самой картинки IBitmapPainter. При этом ICityPainter нужен не только в MapView, но и TownsView. По этим интерфейсам можно работать, и самое главное, если будут введены тролейбусы — то отрисовать их можно будет с уже текущими интерфейсами, и даже типами.

Другой вопрос, что с тролейбусами может быть связана несколько другая логика(так как нужны лепектрические провода). А если у нас изменились города, то вполне достаточно воспользоваться обновить только доступные интерфейсы ICityPainter. Все — рисовальщики не знают о модели, о ней знают только контроллеры. Контракты достаточно сложного решения расписаны.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>