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

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

Наследование фреймов - подводные камни [D7]


Страницы:   1 2

Ega23 ©   (2008-03-18 18:10:00) 

Ситуация следующая: надо унаследоваться от базового фрейма с парой контролов и несколькими методами-свойствами.
Как это сделать в принципе - понятно: наваял в design-time базовый фрейм, засунул в репозиторий, а дальше - New Item и включить inherit
вопрос в следующем: а что будет при командной разработке? Т.е. каким макаром импортировать базовый фрейм с dfm с одной машины на другую (или в систему контроля версий)?
Можно ли как-то унаследоваться от фрейма без возни с ресурс-файлами?


REA   (2008-03-21 12:25:00) [1]

Начет наследования фреймов - бывает оно глючит. Теряет где то свойства предков особенно DB компоненты.


REA   (2008-03-21 12:24:00) [2]

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


Ega23   (2008-03-20 21:06:00) [3]


> Семеныч   (19.03.08 21:20) [28]


Вот аккурат такую штуку реализовали на прошлой работе. Работет в Дагестане.  :)


Ega23   (2008-03-20 21:02:00) [4]


> А можно пример оправданной необходимости такой архитектуры
> приложения ?
>


Пример из реальной жизни.
Задача: обновление абстрактнойБД (патч на структуру + добавление некоторых записей в справочники + обновление ХП).
Ограничения: нужно сделать так, чтобы эта "обновлялка" максимально приблизилась к интрепритируему языку (простите за формулировку, но у товарища день рождения и я сейчас пьян).

Вариант решения:
Практически у любой СУБД есть утилита командной строки, с помощью которой можно СУБД "скормить" некий скрипт (или набор скриптов).
Готовим cmd-файл, в который в качестве параметров передаём параметры коннекта.
Соответственно, готовим некий конфигурационный файл в любом доступном для программы формате (сделаны варианты на ini, xml, в данный момент осваивается YAML).
Данный конфигурационный файл регистрируется со своим расширением, к этому расширению привязывается программа.
Файл состоит из следующих "секций":
1. FormCaption
2. Набор параметров. Каждвй параметр:
 2.1. Имя.
 2.2. Тип параметра.
 2.3. Caption параметра
 2.4. Default Value
3. Параметризованая командная строка

Программа на входе получает этот файл, выставляет Caption, далее генерит нужное количество фреймов в зависимости от типа.
На кнопке "ОК" висит обработчик, заменяющий параметризованую командную строку введёнными параметрами и далее выполняющий RunAndWait (за функцию в который раз спасибо Игорь Шевченко ©).
После чего выводит результат выполнения и умирает.


ANB   (2008-03-20 16:52:00) [5]


> со своим внутренним языком, как это делает та же 1С.

Ну, положим, 1С решила этот вопрос просто - пользует визуал басик и не парится. Только классы для своих примочек написали.

Впрочем, каюсь, я тоже полноценный компилятор поленился писать - за меня оракл работает :)


icWasya   (2008-03-20 10:50:00) [6]

> Ну это и есть желание странного - одному с рюшечками, другому
> чтобы edit был справа

http://habrahabr.ru/pictures/00/00/01/60/37/picture_12.jpg


Семеныч   (2008-03-20 10:01:00) [7]

> Игорь Шевченко ©   (19.03.08 22:45) [29]

> Так бы сразу и сказал

Так я сразу я сказал, что задачи бывают разными. Например, знаю программу, где DFM, можно сказать, и вовсе нет - GUI (притом, довольно навороченный) создается кодом. И для тойзадачи это, видимо, оправдано.


Игорь Шевченко   (2008-03-19 22:45:00) [8]

Семеныч   (19.03.08 21:20) [28]

Так бы сразу и сказал :) В этом случае безусловно имеет смысл хранить.


Семеныч   (2008-03-19 21:20:00) [9]

> Игорь Шевченко ©   (19.03.08 21:01) [27]

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

Кроме того, есть визуальный редактор форм (с палитрой компонентов, Инспектором объектов и пр.). Таким образом, без какой-либо перекомпиляции программы можно изменить ее функционал и GUI (вплоть до замены главной формы) чуть ли не полностью. Причем не только под какую-то контору, а хоть персонально под каждого юзера (или роль).

И это под силу IT-шнику, НЕпрограммисту. И не требует Delphi с ее лицензией. И формы в БД - это одна из составляющих, которые в совокупности все это обеспечивают.
:о)


Игорь Шевченко   (2008-03-19 21:01:00) [10]

Семеныч   (19.03.08 20:16) [26]

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


Семеныч   (2008-03-19 20:16:00) [11]

> Игорь Шевченко ©   (19.03.08 20:05) [25]

> Продукты класса ERP хорошо писать на своем движке, со своим
> внутренним языком, как это делает та же 1С.

Угу. Начинаем подбираться к сути вопроса "зачем нужны формы в БД". А если б еще и на на наводящий вопрос кто ответил, то оно и быстрее было бы.

> С какого боку тут формы в базе

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

===================================

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

И формы в БД - это одна из составляющих, которые в совокупности это обеспечивают.


Игорь Шевченко   (2008-03-19 20:05:00) [12]

Семеныч   (19.03.08 18:41) [22]


> Продукт класса ERP. Понятное дело, требуется адаптация под
> каждого клиента



> Кто-то просит ввести еще один тип накладной, кому-то нравятся
> рюшечки слева (и он готов за них платить)


Продукты класса ERP хорошо писать на своем движке, со своим внутренним языком, как это делает та же 1С.


> а главное то, что у каждого из них еще и свои особенности
> бизнес-логики.


Тем более, с учетом разной бызнес логики.

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


Семеныч   (2008-03-19 19:29:00) [13]

> Джо ©   (19.03.08 19:15) [23]

> «дорабатывать» все-равно придется.

Не обязательно.

> «перекомпилячить», наверное, это не так уж и сложно

Проблема не в компиляции, а в последующей поддержке нескольких десятков фактически разных программ. Это какая же группа поддержки должна быть по численности? И кто в ней должен работать по уровню? И сколько лицензий Delphi она потребует? И во что все это обойдется по деньгам?

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

==========================

Наводящий вопрос - а как решена проблема адаптации и поддержки, например, в 1С? Там ведь даже не десятки, там тысячи клиентов.


Джо   (2008-03-19 19:15:00) [14]

> [22] Семеныч   (19.03.08 18:41)
> > Игорь Шевченко ©   (19.03.08 15:49) [21]
>
> Можно, конечно.
>
> Продукт класса ERP. Понятное дело, требуется адаптация под
> каждого клиента. Кто-то просит ввести еще один тип накладной,
> кому-то нравятся рюшечки слева (и он готов за них платить)
> , а главное то, что у каждого из них еще и свои особенности
> бизнес-логики.
>
> Таких клиентов несколько десятков, и их количество продолжает
> расти. Что делать? Дорабатывать и перекомпилячивать проект
> под каждого? Или что еще?

Ну дык «дорабатывать» все-равно придется. Только в в предложенном вами варианте придется дорабатывать сущности, которые компилятор не проконтроллирует, т.е., риск невыявленных ошибок повышается. А «перекомпилячить», наверное, это не так уж и сложно, учитывая то, что Делфи компилирует очень быстро :)
А для отделения ветвей текущего продукта давно придумали системы контроля версий :)


Семеныч   (2008-03-19 18:41:00) [15]

> Игорь Шевченко ©   (19.03.08 15:49) [21]

Можно, конечно.

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

Таких клиентов несколько десятков, и их количество продолжает расти. Что делать? Дорабатывать и перекомпилячивать проект под каждого? Или что еще?


Игорь Шевченко   (2008-03-19 15:49:00) [16]

Семеныч   (19.03.08 15:45) [20]

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


Семеныч   (2008-03-19 15:45:00) [17]

> Игорь Шевченко ©   (19.03.08 15:11) [19]

>> Если некто чего-то не понимает, то разве это означает, что
>> это что-то плохое или ненужное?

> Это означает, что это странное. См. пост о древнем Китае.

Нет, Игорь. Это означат только то, что некто чего-то не понимает. И больше ничего не означает. Даже если этому некоему оно и кажется странным (что и естественно, раз он не понимает).

А что касается поста древнего Китая, то см. пост об абсолютно безошибочном определителе. Ты же таковым себя не считаешь, верно?
:о)


Игорь Шевченко   (2008-03-19 15:11:00) [18]

Семеныч   (19.03.08 15:03) [18]


> Если руки у программеров заточены криво, то чем виновата
> архитектура приложения?


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


> Если некто чего-то не понимает, то разве это означает, что
> это что-то плохое или ненужное?


Это означает, что это странное. См. пост о древнем Китае.


Семеныч   (2008-03-19 15:03:00) [19]

> Игорь Шевченко ©   (19.03.08 14:03) [17]

> а во время выполнения вылезают ошибки.

Если руки у программеров заточены криво, то чем виновата архитектура приложения?

> Ну не понимаю я, зачем формы в базе хранить.

Если некто чего-то не понимает, то разве это означает, что это что-то плохое или ненужное?


Игорь Шевченко   (2008-03-19 14:03:00) [20]

Семеныч   (19.03.08 13:32) [16]


>  При чем тут переложение обнаружения ошибок?


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

Наиболее иллюстирующий пример - это обильное использование типа Variant.

Ну не понимаю я, зачем формы в базе хранить. Формы в EXEшнике или в DLL-ях должны жить, самое им там место. Опять же, дабы синхронизацию выполнял компилятор, а не хитрый код во время выполнения.


Страницы:   1 2

Наверх

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