Перейти к содержимому

  • 4 Страниц +
  • 1
  • 2
  • 3
  • Последняя »

Мои статьи на RSDN

- может кому-то будут полезны
  • Agile Coach
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Донатор
  • Сообщений: 8 231

 

Надеюсь, 2-месячный труд (август-сентябрь прошлого года) и потом практически полугодовая правка и переговоры с редакторами RSDN Magazine не пропадут без внимания. Итак, статья "Обобщенный Model-View-Controller" наконец-то опубликована в online.

Статья: http://rsdn.ru/artic...generic-mvc.xml
Тема, в которой она будет обсуждаться: http://rsdn.ru/Forum...spx?mid=2416113
Надеюсь, и здесь данный труд будет кому-то интересен.

Интересны любые мнения и вопросы по теме, лучше, конечно, аргументированные. Все вопросы, критику, замечания можно писать в соответствующей теме на Rsdn (см. ссылку выше) или здесь, по возможности буду отвечать.

PS С публикацией в журнале не срослось по независящим от меня причинам, разглашать которые с моей стороны будет некорректно. Тем не менее статья прошла литературную правку главным редактором RSDN Magazine Купаевым Михаилом, за что ему огромное спасибо, и была готова к изданию, но... Язык мой, враг мой. В данный момент идут переговоры с издательством "Открытые системы" о возможности публикации статьи в журнале "Мир ПК", но... что-то ощущение, что мы не договоримся: редактор-девушка откровенно... не понимает сути статьи, предлагая сделать из нее что-то вроде "доступно и даже для блондинок" - формат журнала видимо требует того. Ну и ладно, заработать на статье в любом случае не расчитывал.

Список всех статей: http://rsdn.ru/Forum...&ArticleOnly=1.
  • 0

1
  • 4 Страниц +
  • 1
  • 2
  • 3
  • Последняя »
  • недавно на форуме
  • Pip
  • Вставить ник
  • Цитировать
  • Группа: Новички
  • Сообщений: 7

Комменты. Понравилось, прочел пока что только начало, распечатал и буду медитировать позднее. Мелкие замечания ниже )

На кого рассчитана статья? Программисты которые знают MVC и так его знают. Те кто вообще не в курсе про паттерны, читать вообще не будут. Остаются те, кто знает "что-то", но не понимает или сомневается.

Для таких людей, на мой взгляд, было бы уместно начало "для блондинок". Т.е. показываем безвыходную ситуацию когда код путается, и ничего нельзя сделать. Все плохо. Читатель проникся, он в депрессии. А потом рассказываем что, мол, можно и спастись. И преподносим упрощенно MVC. А потом можно и кодом погрузить тех кто заинтересовался.
  • 0

  • Agile Coach
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Донатор
  • Сообщений: 8 231

QUOTE (lumer @ Mar 23 2007, 17:20)
На кого рассчитана статья?
На тех, кто знает и применяет MVC, а также по возможности и на тех, кто не до конца понимает преимущества MVC или пользуется суррогатами, которые, к примеру, предлагает Microsoft в WinForms и ASP.NET. Но... и это главное "но": статья в основном для тех, кто программирует на компиляторах, поддерживающих обобщенное программирование (generics): показывает, какие преимущества дает скрещивание generics (Java/C#) с оригинальным MVC (Smalltalk-80).

Ключевое слово в названии именно "обобщенный", остальное в статье - детальное рассмотрение нюансов.

А обзорная статья по MVC и его модификации - MVP, на которую, кстати, лично я уже переполз... опять же сделав аналог - Generic MVP, была в номере RSDN Magazine за прошлый год.
  • -1

  • рядовой пользователь
  • PipPip
  • Вставить ник
  • Цитировать
  • Группа: Пользователи
  • Сообщений: 110

Интересно, особенно с Undo/Redo в контроллере.
Есть пара вопросов:
1. Зачем делать проверку изменился параметр модели или нет в контроллере? В общем случае кто-нибудь может setProperty вызвать руками, и тогда опять будут проблемы, я бы проверял это в модели, тем более она активная.
2. Я с Java не знаком, но насколько понял Generic это типа урезанных шаблонов из С++. В таком случае генерируется новый класс View для каждой модели, конкретизированной разными параметрами, это же неудобно, не получится подцепить к модели с одним параметром вьюшку, расчитанную на модель с другим параметром. Хотя может я просто не понимаю механизм Generic-классов в Java ;)
  • 0

  • Agile Coach
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Донатор
  • Сообщений: 8 231

QUOTE (Pete @ Mar 23 2007, 17:56)
Зачем делать проверку изменился параметр модели или нет в контроллере?
Чтобы сделать модель максимально легкой. В принципе, вообще бы советовал смотреть в сторону MVP с пассивной моделью: идея в том, что объект, представляющий данные предметной области, не должен содержать логику работы в рамках MVC, а по возможности вообще не знать, что есть какие-то там контроллеры и представления.

Вот, смотрите... Есть объект Человек, который инкапсулирует, к примеру, ФИО, возраст, рост, вес и т.п. - которые поднимаются (загружаются) или спускаются (сохраняются) из какого-либо хранилища: БД, файловая системы, удаленный ресурс, память и т.п. С чего бы этому объекту заниматься какими-то действиями по работе в рамках MVC? Да он даже не знает, что это такое!

Модель должна быть максимально глупой с точки зрения знания о том, в каком приложении (архитектуре) она работает. Задача модели одна - бизнес-логика, на примере объекта Человек - это определенная обработка его параметров: человек живет и меняется. В статье под этой моделью подразумевается термин "свойство модели", то есть абсолютно любой класс, наследуемый от Object.

А активная модель с реализацией шаблона Observer в статье - это реализация шаблона проектирования Mediator. Именно она встраивает свойство модели в компанию представления и контроллера таким образом, что свойство модели и не подозревает, что участвует в таком шабаше. Последнее время склоняюсь к мысли, что активная модель хуже пассивной - та и вовсе глупая: ни о чем не знает, ничего не ведает, а отвечает только за свою внутреннюю логику.

Резюмируя: вот именно поэтому, логику обработки надо стараться производить в контроллере - по возможности как можно дальше от модели, то есть от бизнес-логики приложения, ведь это и есть то, ради чего все ухищрения и производятся.
QUOTE (Pete @ Mar 23 2007, 17:56)
не получится подцепить к модели с одним параметром вьюшку, расчитанную на модель с другим параметром
А зачем? Представление, расчитанное на отображение модели со свойством Человек, не должно подключаться к модели со свойством Конь. Как вы себе представляете работу такого представления, кого оно покажет: кентавра? smile.gif
  • 0

  • рядовой пользователь
  • PipPip
  • Вставить ник
  • Цитировать
  • Группа: Пользователи
  • Сообщений: 163

Статья интересная.

Тема конечно не новая, но актуальная.
Я бы сказал, что статья больше академическая, нежели практическая.

Для полноты картины не хватает примера реализации этого фрэймворка для web-приложений. :)

А так, можно сказать, без всякого сарказма и издевки, что ты "чувак".

  • 0

  • Счастливые слюноотсосы
  • PipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Донатор
  • Сообщений: 4 803

QUOTE (Гуинплен @ Mar 23 2007, 13:45)
2-месячный труд (август-сентябрь прошлого года) и потом практически полугодовая правка

Ты бы лучше работал на работе-то... :))
Potes meos suaviari clunes
  • 0

  • Agile Coach
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Донатор
  • Сообщений: 8 231

QUOTE (IVAN @ Mar 23 2007, 19:26)
не хватает примера реализации этого фрэймворка для web-приложений
ASP.NET? Две ссылки в начале статьи...
Можно еще и таким примером дополнить: http://rsn81.russia.webmatrixhosting.net/MVP%20Web%20Example - Generic MVP (Model-View-Presenter).
QUOTE (Mandor @ Mar 23 2007, 19:47)
Ты бы лучше работал на работе-то...
Ты бы, Миш, лучше жевал, а?

Сообщение отредактировал Гуинплен: 24.03.2007 - 19:21

  • 0

  • рядовой пользователь
  • PipPip
  • Вставить ник
  • Цитировать
  • Группа: Пользователи
  • Сообщений: 110

QUOTE
идея в том, что объект, представляющий данные предметной области, не должен содержать логику работы в рамках MVC, а по возможности вообще не знать, что есть какие-то там контроллеры и представления

Абсолютно согласен :)

Про кентавра-это хорошо ;) Но, если рассмотреть представление, расчитанное на модель со свойством "число с плавающей точкой", в вашем случае я не смогу подцепить к нему модель с целочисленным свойством. Принципиальной разницы в их отображении нет, а придется либо перекомпоновывать форму, либо писать адаптер, либо как-то еще плясать. В этом случае мне нравится как сделано в Qt, где данные передаются через Variant. Естественно, это имеет свои недостатки ;)
А преимущества пассивной модели я пока смутно представляю. sad.gif
  • 0

  • Agile Coach
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Донатор
  • Сообщений: 8 231

Variant как и другие примеры отсутствия или слабой типизации (PHP, FoxPro и т.п.) - абсолютное зло, в некоторой степени даже антипод generic-ов.
QUOTE (Pete @ Mar 24 2007, 17:11)
Но, если рассмотреть представление, расчитанное на модель со свойством "число с плавающей точкой", в вашем случае я не смогу подцепить к нему модель с целочисленным свойством.
В ООП, когда поведение нескольких разнородных объектов необходимо привести к одному конкретному, используется шаблон проектирования Adapter, вот цитата из перевода GoF:
QUOTE
Проблема

Необходимо обеспечить взаимодействие несовместимых интерфейсов или как создать единый устойчивый интерфейс для нескольких компонентов с разными интерфейсами.

Решение

Конвертировать исходный интерфейс компонента к другому виду с помощью промежуточного объекта - адаптера, то есть, добавить специальный объект с общим интерфейсом в рамках данного приложения и перенаправить связи от внешних обьектов к этому объекту - адаптеру.

  • 0

  • рядовой пользователь
  • PipPip
  • Вставить ник
  • Цитировать
  • Группа: Пользователи
  • Сообщений: 110

QUOTE
...используется шаблон проектирования Adapter...

Хм ... об этом я и говорил:
QUOTE
либо писать адаптер

Насчет абсолютного зла - это вы зря, просто подругому, со своими достоинствами и недостатками.
  • 0

  • Agile Coach
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Донатор
  • Сообщений: 8 231

Достоинство - быстро (следовательно проекты короткие и дешевые). Недостаток - ненадежно (следовательно большие и дорогие проекты не светят). Может это звучит смешно, но именно ориентируясь на это можно больше зарабатывать - сфера ИТ вообще один большой, но умно построенный фарс. smile.gif
  • 0

  • почтенный теронозавр
  • PipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Отключенные
  • Сообщений: 2 765

Интересная статья... доступная, достаточно отчуждённая от средств реализации но при этом ьез отрыва от производства, так сказать ))) Снимаю шляпу перед автором, ибо это надо иметь столько терпения - удачно формализовать и разложить по полочкам то, что любой нормальный программист интуитивно понимает, но связно объяснить не всегда может. Единственное, что немного покоробило (конечно всё это очень субъективно ;D ) - раздел «Реализация». Видимо, «для блондинок», там описываются довольно-таки очевидные вещи, которые можно было бы оставить на откуп читателю, пожелавшему самому разобраться с MVC в вашей интерпретации.

QUOTE
Недостаток - ненадежно (следовательно большие и дорогие проекты не светят)

Ну это только в условиях отсутствия типизации. Если же типизация конечных типов данных слабая, это не значит, что в целом система ненадёжна. Более объёмная - да.
  • 0

  • Agile Coach
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Донатор
  • Сообщений: 8 231

QUOTE (Ky3bMu4 @ Mar 27 2007, 15:12)
это надо иметь столько терпения - удачно формализовать и разложить по полочкам то, что любой нормальный программист интуитивно понимает, но связно объяснить не всегда может
Вы бы знали, сколько терпения надо в общении с издательствами и редакторами: время написания черновика статьи - 2 месяца (по вечерам, разумеется), а время правки с редакторами (и модераторами Rsdn) и ожидания - практически полгода.
QUOTE (Ky3bMu4 @ Mar 27 2007, 15:12)
Видимо, «для блондинок», там описываются довольно-таки очевидные вещи, которые можно было бы оставить на откуп читателю, пожелавшему самому разобраться с MVC в вашей интерпретации.
Ну почему бы не разжевать: вы интуитивно поняли, а кому-то это поможет. smile.gif
Высоколобые итак все знают, ну а мне в свое время такие подробные объяснения шаблонов помогли бы, но их попросту тогда на русском языке не было.
QUOTE (Ky3bMu4 @ Mar 27 2007, 15:12)
Более объёмная - да.
Чем объемнее проект, тем дороже - только об этом и говорил.
  • 0

  • почтенный теронозавр
  • PipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Отключенные
  • Сообщений: 2 765

QUOTE (Гуинплен @ Mar 27 2007, 16:56)
по вечерам, разумеется

хы укол Mandor'у

QUOTE (Гуинплен @ Mar 27 2007, 16:56)
а время правки

ничего себе. Вдвойне снимаю шляпу.

QUOTE (Гуинплен @ Mar 27 2007, 16:56)
Высоколобые итак все знают, ну а мне в свое время такие подробные объяснения шаблонов помогли бы

Года два бы назад попалась бы мне такая статья... шишек бы на моём не очень высоком ;D лбу было бы меньше.
  • 0

  • Agile Coach
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Донатор
  • Сообщений: 8 231

Кстати, вчера вечером статья была обновлена до версии 2.5: оптимизирована реализация на Java - теперь она практическим ни в чем не уступает C# аналогу. Спасибо за рефакторинг Java-кода Жданову Денису (bolshik с форума Rsdn).
  • 0

  • Agile Coach
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Донатор
  • Сообщений: 8 231

 

Статья "Обобщенный Model-View-Controller. Шаблон проектирования MVC в исполнении Generic Java и C#", а также, возможно, и следующие мои и публикации моих коллег по наиболее интересным свободным творческим проектам будут публиковаться в нашем Блоге. Добро пожаловать, если интересно!

В данный момент на стадии согласования висит новая статья. Позволю себе опубликовать ее краткий анонс:
QUOTE
Обобщенный Model-View-Controller
Повышение качества графического интерфейса пользователя


Автор: Сергей Рогачев
Версия текста: 1.7


1 Я возьму с собой в дорогу…

2 Шаблон проектирования Observer

2.1 Оповещение подписчиков и потоковая безопасность
2.2 Недействительные подписчики и утечка памяти
2.3 Безопасность инициализации подписчиков
2.4 Дефектные подписчики и отказоустойчивый издатель
2.5 Издатель на слабых ссылках
2.6 Множественный издатель

3 Потоковая безопасность модели

4 Шаблон проектирования Command

4.1 Команда
4.2 Контроллер

5 Защитное программирование

5.1 Ожидание ошибки
5.2 Локализация ошибки
5.3 Пример
5.4 Утверждения
5.5 Контрактные спецификации

6 Источники

Errare humanum est perseverare diabolicum. Seneka

Статья продолжает одноименный материал, опубликованный ранее, рассмотрением ошибок, допущенных в реализации обобщенного Model-View-Controller. Вместе с тем работа рассматривает общие проблемы и решения в области безопасного программирования, в частности: потоковую безопасность, ликвидацию утечки памяти, безопасность инициализации и защитное программирование на основе контрактных спецификаций – поэтому предполагается, что статья будет интересна всем, кто заинтересован в повышении качества своих приложений. В описании приводятся реализации шаблонов проектирования Observer, Command, Model-View-Presenter. Примеры построены на модульном тестировании и используют аспектно-ориентированное программирование. Предполагается наличие у читателя знания языка программирования Java 5 и модульного тестирования на основе платформы JUnit.

  • 0

  • Agile Coach
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Донатор
  • Сообщений: 8 231

Статья обновлена до версии 3.0. Основное: добавлен пункт 2.3 и исправлен грязный баг в коде примеров, который мог привести к утечке памяти приложений (кто копировал код примеров, советую посмотреть изменение).
  • 0

  • Agile Coach
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Донатор
  • Сообщений: 8 231

Почитал описание выпускаемого сейчас MS-ами ASP.NET MVC Framework.
Забавно, имею наглость заявлять, что парни довели мою идею до ума. smile.gif
Шутка, конечно, сделано много ради интеграции со всем и вся, но каркасная идея с обобщениями 1 в 1, как у меня. Надо будет скачать и потрогать.
  • 0

  • [удалено администрацией г.Перми]
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Пользователи
  • Сообщений: 5 773

QUOTE (Гуинплен @ Mar 14 2008, 03:31)
Почитал описание выпускаемого сейчас MS-ами ASP.NET MVC Framework

ой как интересненько )
вкратце.. (англ)
Не приписывайте мне ваши глупые мысли..
  • 0

  • 4 Страниц +
  • 1
  • 2
  • 3
  • Последняя »

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей