| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Вопросы о формах |
| Автор: Ch0bits 12.3.2006, 10:57 |
| Добрый день! Вот собственно мои вопросы: 1. Как правильно организовать структуру многооконного приложения? 2. Как осуществить доступ из одной формы к другой? 3. Как организовать в приложении общие данные, которые были бы доступны всем формам. Заранее спасибо! С уважением, Ch0bits. |
| Автор: Exception 12.3.2006, 12:12 |
| Имхо, MVC рулит. Советую почитать об этом паттерне. Краткая суть такова: Приложение разделяется на три части: 1. Model - в ней хранятся данные приложения 2. View - это как раз user interface, вроде класса, контролирующего все формы 3. Controller - это класс, который реагирует на события View и изменяет Model Общая схема взаимодействия такая: 1. Юзер щелкает на элементе формы 2. Об этом "узнает" View (например, можно послать событие) 3. View вызывает метод Controller'а 4. Controller работает с Model Добавлено @ 12:15 Вообще, есть готовые фреймворки для реализации MVC, например Enterprise Library Composite UI Application Block, но с ним сначала нужно разобраться. |
| Автор: mr.DUDA 12.3.2006, 15:47 |
| Exception, вообще-то спрашивали как раз об организации набора форм. Это сама по себе сложная задача, требующая сбалансированного решения. По ходу разработки в каждой форме появляется туча своих обработчиков событий, методов и свойств, не все из которых можно вынести за пределы формы. Чем более навороченная форма, тем сложнее отделять функциональность собственно формы как визуального элемента, от функциональности формы как части MVC. |
| Автор: Exception 12.3.2006, 18:06 | ||
Поэтому форма должна отправлять свои события на обработку Controller'у... Вот этого MVC и позволяет избежать. Короче, это было моё ИМХО |
| Автор: mr.DUDA 12.3.2006, 20:12 | ||
Если все события формы отправлять контроллеру, то контроллер будет поставлен в зависимость от последовательности и взаимозависимости событий, генерируемых визуальными компонентами формы, а это чревато быстрым и неконтролируемым разрастанием исходного кода класса контроллера а-ля "все-формы-в-одном-классе". Я говорю о том, что нужно изначально разделить логику формы на визуальную и содержательную части, а это сделать архисложно, так как: - форма есть неделимый элемент, уже сочетающий данные и их поведение с визуальной частью и её поведением; - форма очень часто (если не слишком часто) подвергается изменениям и дополнениям, что приводит к появлению дополнительных обработчиков и методов, и модификации существующих обработчиков и методов, добавлению новых. А посему: 1) изначально невозможно отделить визуальную часть от кода, управляющего данными; 2) для максимальной эффективности, разработчик обязательно должен всегда видеть, хотя бы мысленно, общую картину взаимодействия между различными визуальными элементами приложения, работающими одновременно либо раздельно и зависящими либо не зависящими друг от друга; 3) если разработчик теряется в собственноручно разработанной модели поведения приложения -- это значит, что контроль утерян и приложение развивается хаотично, что рано или поздно приводит к полному либо частничному рефакторингу приложения (в зависимости от сложности дополнения, которое вызвало рефакторинг), либо даже к необходимости написания аналогичного приложения с нуля, а-ля "пригласим негра-студента, который напишет аналог" И тут MVC уже не советчик, к сожалению. Ещё MFC на этом зубы сломала: на их CMainFrame/CDocument/CView приходилось делать такие извраты, какие их майкрософту и не снились К сожалению, не факт, см. выше... Моё имхо: каждый разработчик имеет своё имхо. Это его личное дело, и иметь своё мнение - личное право каждого трудящегося Краткое резюме: делай как тебе больше нравится, но используй как можно больше чужого опыта, остальное - см. мою подпись |
| Автор: Exception 12.3.2006, 20:28 |
| Ты CAB глядел? Там вроде очень хорошо все это реализовано. |
| Автор: mr.DUDA 12.3.2006, 20:33 |
| К сожалению, нет... пока что. Надо будет глянуть, что они там напридумали |
| Автор: Medved 15.3.2006, 01:26 | ||
| MS об этом уже подумала, и даже разработала каркас приложения, только бери и пользуйся! Это в общем: http://forum.vingrad.ru/index.php?act=ST&f=199&t=80158&st=0 Это в частности: http://msdn.microsoft.com/library/en-us/dnpag2/html/CAB.asp?frame=true Добавлено @ 01:36
Ты зря проявляешь недоверие. Идея отличная, реализация еще лучше! Использованна вся мощь С# и платформы NET, в совокупности с последними достижениями в ООП. Если разберешся в этом - я убежден, равнодушным CAB тебя не оставит. Вся архитектура постренна на паттернах. В рамках CAB, писать плохо - просто невозможно. |
| Автор: mr.DUDA 15.3.2006, 08:32 |
| Обязательно посмотрю |
| Автор: Medved 15.3.2006, 12:15 |
| успокоил |