Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ищется элегантное решение. [D7]


Страницы:   1 2 3

Василий Василич Пупкинд ©   (2008-05-15 17:53:00) 

Имеется иерархия форм отображения данных бд.
Весь функционал и окончательный внешний вид реализован в предпоследних элементах иерархии (форма для конкретных данных).
В последних элементах иерархии (наследниках предпоследних) добавлены компоненты доступа к бд и переопределены некоторые методы зависимые от движка.
Как сделать доступным в методах предпоследнего элемента датасеты последнего элемента иерархии?


Василий Василич Пупкинд   (2008-05-15 19:56:00) [21]

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


Василий Василич Пупкинд   (2008-05-15 19:52:00) [22]

Который будет точно равен Self. Решение поистине элегантнейшее. LOL.

Не надо плохо думать о людях.
В модуле предпоследнего класса будет сцыла на экземпляр формы все знающей о конкретных компонентах доступа.

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

type
предпоследний_класс = class(...)
protected
  function гет_ми_нужныйдатасет; virtual; abstract;
end;


Да вот хренушки вам, а не нормалоьное место.
Вызов-то делает не наследник, а предок, который ничего не знает о классе наследника. Это если не классовый метод.
Если метод классовый как у вас, то модуль предпоследнего класса должен знать все библиотеки доступа.
То есть с чем боролись, на то и напоролись.

Впрочем я уже опробовал свой метод. Все работает как часы.


Юрий Зотов   (2008-05-15 19:33:00) [23]

> Василий Василич Пупкинд   (15.05.08 19:15) [17]

> В модуле предпоследнего класса заводим паблик переменную
> типа предпоследнего класса. при создании экземпляра наследника
> инициализируем её экземпляром наследника.

Который будет точно равен Self. Решение поистине элегантнейшее. LOL.

> Теперь когда в предпоследнем эшелоне потребуется
> конкретный датасет, буду вызывать виртуальный метод
> гет_ми_нужныйдатасет через эту переменную.

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

type
 предпоследний_класс = class(...)
 protected
   function гет_ми_нужныйдатасет; virtual; abstract;
 end;


Василий Василич Пупкинд   (2008-05-15 19:20:00) [24]

var destiny_fucker : TOlmostLastClassInHierarchy = nil;

вопрос закрыт, всем спасибо за внимание.


Василий Василич Пупкинд   (2008-05-15 19:15:00) [25]

В общем придумал. Счастье есть.
Все будет даже проще чем у большакова.
В модуле предпоследнего класса заводим паблик переменную типа предпоследнего класса.
при создании экземпляра наследника инициализируем её экземпляром наследника. Теперь когда в предпоследнем эшелоне потребуется конкретный датасет, буду вызывать виртуальный метод гет_ми_нужныйдатасет через эту переменную.

Вопрос по существу: как по английски назвать переменную "обманщик судьбы"?
:)))


Василий Василич Пупкинд   (2008-05-15 19:02:00) [26]

Ага щас. Любой.
Берем грид + датасорс.
датасорс смотрит либо на TADODataset либо на TQuery.
Задача: Внутри методов грида узнать текст sql результаты которого в гриде.


ANB   (2008-05-15 18:57:00) [27]


> Там грид ничего не зная о классе датасета, тем не менее
> может работать с его свойствами и методами.

Дык это любой грид умеет. Как и любой DB контрол в делфи.


Василий Василич Пупкинд   (2008-05-15 18:31:00) [28]

Пока есть одно решение моей задачи.
Сделаю нечто похожее на класс TDBFeatures из EhLib'а.
Там грид ничего не зная о классе датасета, тем не менее может работать с его свойствами и методами.


Palladin   (2008-05-15 18:24:00) [29]


> Василий Василич Пупкинд   (15.05.08 18:22) [12]

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

про ввод ассоциации с источником данных я тебе уже написал


Василий Василич Пупкинд   (2008-05-15 18:22:00) [30]

а вот эта самое суть есть "свинья"... на которую ожерелье ищется...

Это не свинья, а заветная мечта по имени "повторное использование кода"


Василий Василич Пупкинд   (2008-05-15 18:20:00) [31]

Тем не менее ищется способ быстро переходить с одной библиотеки доступа на другую. Малой кровью.


Palladin   (2008-05-15 18:15:00) [32]


> суть идеи в том, что все алгоритмы обработки реализованы
> в предпоследнем элементе, который ничего не должен знать
> о библиотеке доступа.

а вот эта самое суть есть "свинья"... на которую ожерелье ищется...


Palladin   (2008-05-15 18:14:00) [33]


> Как сделать доступным в методах предпоследнего элемента
> датасеты последнего элемента иерархии?

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


Василий Василич Пупкинд   (2008-05-15 18:12:00) [34]

Вынести датасеты в модуль данных.

Не подойдет.
суть идеи в том, что все алгоритмы обработки реализованы в предпоследнем элементе, который ничего не должен знать о библиотеке доступа.


Василий Василич Пупкинд   (2008-05-15 18:09:00) [35]

Ожерелье для свиньи ищешь?

Хочу обмануть судьбу (иметь возможность за 20 минут портировать приложение под другие либы доступа)


Василий Василич Пупкинд   (2008-05-15 18:07:00) [36]

интерфейс реализовать ?

Дык как?


Василий Василич Пупкинд   (2008-05-15 18:07:00) [37]

Объявить в предпоследнем элементе свойства соответствующего типа,

Не все так просто.

создается экземпляр последнего элемента и вызывается унаследованный метод(ы) предпоследнего. У него все методы тоже виртуальные но толку-то от этого, если они вызываются из методов предка.  свои же предковые методы и вызываются хотя все они переопределены в последнем.


Юрий Зотов   (2008-05-15 18:04:00) [38]

Вынести датасеты в модуль данных.


DrPass   (2008-05-15 17:58:00) [39]


> Как сделать доступным в методах предпоследнего элемента
> датасеты последнего элемента иерархии?

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


Palladin   (2008-05-15 17:57:00) [40]

Ожерелье для свиньи ищешь?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо