Tertium |
Отправлено: 17.04.2004, 18:15 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
Народ, у меня к вам вопрос проектирования. Живу в билдере всего месяц, но уже хочется чёткой структуры программы с использованием vcl-компонентов. Но проблема вот в чём. VCL-ные компоненты сами по себе представляются билдером классами. Мои классы активно взаимодействуют с интерфейсом, поэтому возникает куча проблем видимости, которые решаются передачей указателей на формы, три-вью и прочую хрень. Но вперемешку с интерфейсом вскоре получается куча мала. Например, с одной стороны, объект представляет собой таскаемое окошко и инкапсулирует всё с этим связанное (обработка событий, связанных только с ним и его свойствами), с другой — он обрабатывает некоторые свои события, в результате изменяя что-то в других объектах — главном окне и пр., с третьей — его агрегирует объект-коллекция, для которого он только звено логической цепочки и, соответственно, несёт в себе некоторую часть логики. Разбивать по классам один-единственный объект как-то странно, вроде бы нарушается целостность объекта по GRASP. И интерфейс пользователя отвязать от него сложно. Только и вспоминаются консольные приложения В Visual C++ я активно пользовал пользовательские сообщения окнам. И в билдере так делаю. Плюс в том, что парент окна можно найти и апишными и борландовскими функциями, и не надо никакой указатель передавать. Правда это попахивает процедурным программированием, но что делать. Попытался всю работу с интерфейсом делегировать классу главного окна, через эти самые пользовательские сообщения, в результате он разросся как на дрожжах. В вижл студии это ничего, здесь же редактор жутко тормозной и неудобный, и прибамбасов на него нет, так что мучение сплошное — читабельности никакой. Но в вижл студии нет VCL, а она сильно помогает жить (в отличие от MFC и ATL).
Короче говоря, кто и как разделяет интерфейс пользователя VCL и логику приложения?
|
|
Deem |
Отправлено: 23.04.2004, 16:55 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
Замутный вопрос. Форма — это класс, поля (или свойства ) которого — указатели на объеты интерфейса (VCL — компоненты). Добвляешь поля для своей логики, методы, обрабатывающие логику и интерфейс..... Короче, кажися тебе подойдет наследование. Создаешь класс с полной обработкой интерфейса. (по-твоему) кучка выходит небольшая.
Затем наследуешь этот класс — в наследнике будет чистота да простор. Его набиваешь обработкой логики. Тож кучка небольшая. Или че тебе ваще недо? Чего пристал тут?
Если мне сильно хочется отделить логику от интерфейса, я создаю отдельный класс в отдельном модуле без окна. Потом связываю его с окном, которое обрабатывает только интерфейс. С freind поиграйся.
А еще проще так:
// Методы интерфейса ///////////////////////////
.....
....
....
//////////////////////////////////////////////////////////
// Методы логики //////////////////////////////////
....
....
....
//////////////////////////////////////////////////////////
Хе-хе-хе-хе-хе...
|
|
|