Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Связать класс и форму TForm  [new]
DFilushin
Member

Откуда: Новосибирск
Сообщений: 236
Добрый день

Какие есть решения для MVC в делфи?
Есть класс
  TDocument = class
  private
    FDatabase: TDatabase;
    FDataset: TDataSet;
    FId: Integer;
    FLastDate: TDateTime;
    FLastUser: String;
    FIdAuthor: Integer;
    FIdReciever: Integer;
    FIdTypeDocument: Integer;
    FDateCreated: TDate;
    FLinkDocument: TDocument;
    FLinkType: String;
    FTitle: String;
    FNumber: String;
    FAuthor: TEmployee;
    FReceiver: TEmployee;
    FText: String;

и есть форма для отображения/редактирования данных. Как правильно связать этот класс, заполнить поля в форме данными из класса и потом после редактирования их передать для сохранения? Сохраняет класс в БД данные.
7 окт 17, 16:17    [20850954]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
DimaBr
Member

Откуда:
Сообщений: 10256
DFilushin
Как правильно связать этот класс, заполнить поля в форме данными из класса...

Правильно ручками. Или, например, назвать компоненты по полям класса+приставка и написать процедуру заполнения.
Если класс от TComponet, то перебираем все публикуемые поля и для каждого ищем компонент на форме для заполнения
7 окт 17, 16:28    [20850965]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
DFilushin
Member

Откуда: Новосибирск
Сообщений: 236
DimaBr,
ручками это типа ReadDocument и там
edtNumber.TExt:= FDocument.Number;
edtDateDoc.Value:= FDocument.DateDoc...

И на кнопке Save - SaveDocument, где делать обратное и вызывать FDocument.Save?
7 окт 17, 16:33    [20850971]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43836

DFilushin
И на кнопке Save - SaveDocument, где делать обратное и вызывать FDocument.Save?

Да. Надеюсь, ты не боишься стереть пальцы до основания, набирая десять строк примитивного
кода?..

Posted via ActualForum NNTP Server 1.5

7 окт 17, 16:51    [20850986]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57590
Вы хоть расскажите человеку про DB-aware и LiveBinding-и.

Posted via ActualForum NNTP Server 1.5

7 окт 17, 17:02    [20851000]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
DFilushin
Member

Откуда: Новосибирск
Сообщений: 236
Гаджимурадов Рустам,

пользовался этим столько лет. На каждую форму положить dbaware - компонент или в дб=модуле запихнуть их 100?
7 окт 17, 17:12    [20851012]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
чччД
Guest
DFilushin
Гаджимурадов Рустам,

пользовался этим столько лет. На каждую форму положить dbaware - компонент или в дб=модуле запихнуть их 100?


Для начала попытаться выяснить, что есть "dbaware - компонент" в данном контексте?
7 окт 17, 18:26    [20851088]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
DFilushin
Member

Откуда: Новосибирск
Сообщений: 236
чччД,

TDataset, TDbEdit, TDataSource
7 окт 17, 18:30    [20851101]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57590
DFilushin> На каждую форму положить dbaware - компонент или в дб=модуле запихнуть их 100?

Это зависит от архитектуры программы и её модулей и подхода разработчика к ним.
Можно на каждую форму, можно на датамодуль, датамодулей может быть несколько,
в т.ч. на каждую форму по одному. И т.д.

Posted via ActualForum NNTP Server 1.5

7 окт 17, 18:49    [20851139]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
rgreat
Member

Откуда:
Сообщений: 3665
Есть отличный подход: не усложняй простое решение без необходимости.
7 окт 17, 20:06    [20851246]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
ziv-2014
Member

Откуда:
Сообщений: 63
Использовать интерфейсы
7 окт 17, 21:32    [20851376]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
DFilushin
Member

Откуда: Новосибирск
Сообщений: 236
ziv-2014,

можно подробнее?
7 окт 17, 21:42    [20851393]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
ziv-2014
Member

Откуда:
Сообщений: 63
DFilushin
ziv-2014,

можно подробнее?

Реализовываете интерфейс для сохранения в базу + используете атрибуты и rtti.
Реализовываете интерфейс для отображения на форме.
Конкретная реализация зависит от вкуса.
7 окт 17, 22:13    [20851442]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
rgreat
Member

Откуда:
Сообщений: 3665
ziv-2014,

Только сказал "не усложняй без нужды" и вот...
8 окт 17, 00:04    [20851572]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57590
ziv-2014> используете атрибуты и rtti.

Ну, интерфейсы при наличии готового класса ещё ладно.
Но что такое в данном контексте "атрибуты" и зачем rtti?

Posted via ActualForum NNTP Server 1.5

8 окт 17, 01:24    [20851680]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
чччД
Guest
Вот нафига в Delphi эта MVC? Неужели действительно собираемся оперативно тасовать компоненты (MVC)?

Ну, ради чего периодически кто-то пытается натянуть старую сову на глобус?
8 окт 17, 04:05    [20851715]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57590
Что умеют, то и пытаются натянуть.
В конце концов, MVC это стильно,
модно и молодежно.

Posted via ActualForum NNTP Server 1.5

8 окт 17, 11:38    [20851949]     Ответить | Цитировать Сообщить модератору
 Re: Генератор отчетов с включением дизайнера в конечное приложение - ы...?  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 742
А кое где тем временем до сих пор работают программы написанные на коболе :) Ох уж мне все эти новомодные технологии :))
8 окт 17, 11:42    [20851959]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
DFilushin
Member

Откуда: Новосибирск
Сообщений: 236
Гаджимурадов Рустам,

а вы попробуйте Django на питоне. Удобно и "стильно"
8 окт 17, 15:50    [20852248]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
ziv-2014
Member

Откуда:
Сообщений: 63
Гаджимурадов Рустам
Ну, интерфейсы при наличии готового класса ещё ладно.
Но что такое в данном контексте "атрибуты" и зачем rtti?

Атрибуты нужны для того, чтобы указать какие поля связывать и сохранять.
Rtti - нужен для того, чтобы сделать все автоматом.
8 окт 17, 17:59    [20852494]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
чччД
Guest
DFilushin
Гаджимурадов Рустам,

а вы попробуйте Django на питоне. Удобно и "стильно"


Ну ты разберись, какие инструменты в Delphi имеются, как люди работают, а не лезь буром.
MVC реализовать совсем несложно, только ты не знаешь самых основ, судя по твоим сообщениям.

Ну а ты попробуй на питоне кодить "в стиле Delphi". И на каком-нибудь форуме питоноидов рассказывай, что у них не так для быстрой и удобной работы.
8 окт 17, 18:45    [20852653]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57590
ziv-2014> Атрибуты нужны для

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

Что "rtti нужен для того, чтобы сделать все автоматом" и
ежу понятно, но непонятно как он поможет с БЛОБами, с
любым нестандартным выводом даже integer и string-полей.
Или надо будет "эти 10 полей автоматом, эти 5 полей вручную,
а здесь рыбу заворачивали" ?

Posted via ActualForum NNTP Server 1.5

8 окт 17, 18:54    [20852679]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
ziv-2014
Member

Откуда:
Сообщений: 63
Гаджимурадов Рустам
Что "rtti нужен для того, чтобы сделать все автоматом" и
ежу понятно, но непонятно как он поможет с БЛОБами, с
любым нестандартным выводом даже integer и string-полей.
Или надо будет "эти 10 полей автоматом, эти 5 полей вручную,
а здесь рыбу заворачивали" ?

А чтобы справиться с БЛОБАМИ и любыми нестандартными типами,
тута тебе в помощь атрибуты с необходимыми обработчиками для
не стандартных типов.
8 окт 17, 19:45    [20852766]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1586
Гаджимурадов Рустам
Я не спрашивал, для чего они нужны.
Я спрашивал, что под ними подразумевается.
Если затрудняешься объяснить - можно привести пример.
Так именно аттрибуты и подразумеваются. Смотри любой ОРМ для делфи
8 окт 17, 22:37    [20853102]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
vavan
Member

Откуда: Казань
Сообщений: 2892
DFilushin
TDbEdit
если юзать что-то вроде dblayoutview/dbcardview (от девэксов) то от россыпи подобных индивидуальных под каждое поле контролов возможно будет практически полностью отказаться
9 окт 17, 09:24    [20853488]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
stanilar
Member

Откуда: Спб
Сообщений: 539
DFilushin
TDataset, TDbEdit, TDataSource


TDataSource на той-же форме, что и TDataset, или той, что содержит TDbEdit?
9 окт 17, 11:11    [20853798]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
Уважаемый автор
Member

Откуда: Питер
Сообщений: 225
Я не использую DB-Aware компоненты, использую обычные контролы, заполнение и сохранение все через select, update, insert.
Зато все контролируемо и гибко!
9 окт 17, 21:02    [20855988]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
DFilushin
Member

Откуда: Новосибирск
Сообщений: 236
Много мнений, есть интересные идеи (rtti, автогенерация форм и т.д).
Ранее была программа для медицины. Вот проблемы почему написал пост. В случае использования DBAware (TDbEdit, TDataSource, TDataset) использовал модуль данных для сеток, справочников. Редактирование записи в форме со своим датасетом в каждой форме. Нужно редактировать данные пациента - весь набор данных с селектом и апдейтом в компоненте на форме редакторе пациента.
Справочники и выбор данных из справочников в отдельном модуле с передачей только датасета, всё остально ренерится автоматом вплоть до редактора справочника. Уникальные формы - да, ручные с одним датасетом, как выше писал.
Вот где самое интересное. Начинаем управлять назначениями на пациентов, есть сущность - пациент, его назначения. Назначения можно продлить, прекратить приём, переназначить и т.д. В каком месте это обрабатывать? В форме назначения или всё-таки писать класс для реализации, который вызовет хранимку в бд?
Один из вариантов это невизуальный класс, который возвращает датасет для грида и действительно всё обрабатывает по данным. И тогда в форме лишь вызываешь функции обработки.
12 окт 17, 08:17    [20862675]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
stanilar
Member

Откуда: Спб
Сообщений: 539
DFilushin
В форме назначения или всё-таки писать класс для реализации, который вызовет хранимку в бд?


Это путь к размазыванию логики между сервером и клиентом. Чем больше будет размазано, тем сложнее будет сопровождать.
12 окт 17, 19:36    [20865478]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2016
Никакое MVC не поможет плохому дизайну ПО. Я не говорю, что он у вас такой. Просто для информации. Стоит вначале хорошо продумать общий программный дизайн. А уже как его реализовать - используя MVC, или просто на уровне батонокидательства - дело не столь важное.
12 окт 17, 20:19    [20865572]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
чччД
Guest
makhaon
Никакое MVC не поможет плохому дизайну ПО...

"Да, но зато ты умрешь уставшим" -©.
12 окт 17, 21:17    [20865678]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
rgreat
Member

Откуда:
Сообщений: 3665
чччД
makhaon
Никакое MVC не поможет плохому дизайну ПО...

"Да, но зато ты умрешь уставшим" -©.
Ахаха. В точку.
12 окт 17, 22:33    [20865834]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
DFilushin
Member

Откуда: Новосибирск
Сообщений: 236
stanilar,

и как тогда?
14 окт 17, 15:34    [20869608]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
rgreat
Member

Откуда:
Сообщений: 3665
Для большинства не сложных задач достаточно обработки Button1Click.
14 окт 17, 16:32    [20869667]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
DimaBr
Member

Откуда:
Сообщений: 10256
rgreat
Для большинства не сложных задач достаточно обработки Button1Click.

Для более сложных подойдёт Action1Click
14 окт 17, 17:40    [20869711]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
чччД
Guest
DFilushin
stanilar,

и как тогда?

Когда наступит "тогда", тогда и думать будешь.
Говнокодь, как бог на душу положит, пока проект не станет сложным. Потом проведешь рефакторинг.

...а в следующий раз все сделаешь сразу по уму, канешна.
14 окт 17, 19:31    [20869808]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
stanilar
Member

Откуда: Спб
Сообщений: 539
DFilushin
и как тогда?

Для себя принял что в учетках клиент нужен только для отображения/редактирования информации.
15 окт 17, 16:23    [20870771]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
s62
Member

Откуда: Жуковский
Сообщений: 700
DFilushin
DimaBr,
ручками это типа ReadDocument и там
edtNumber.TExt:= FDocument.Number;
edtDateDoc.Value:= FDocument.DateDoc...

И на кнопке Save - SaveDocument, где делать обратное и вызывать FDocument.Save?

Если не использовать db-aware элементы управления, то я думаю, что да, примерно так. Если действия объемные и сложные, то можно какую-то часть вынести в отдельную процедуру. Ну это же здравый смысл, удобство повторного использования кода, удобство чтения, красота наконец)) .

А если использовать db-aware элементы управления, я, например, с БД написал несколько маленьких программ, а вот такую относительно большую - одну, переписывал написанную на Access когда-то другим человеком программу учета производства у нас в фирме. И по ходу её написания, понятное дело, учился. В частности, сначала кидал все датасаты, датасорцы на Датамодуль. Но когда их там стало несколько десятков и стало проблемой найти что-то, от решил, что это ерунда и теперь размещаю прямо на новых формах, если что-то новое добавлял. Можно, конечно заводить датамодули для отдельных форм, но это ведь тоже требует доп. действий - когда форма создается, создать датамодуль, пллюс создать его первым, чтобы не получить acess violation, когда при создании формы пытаешься открыть наборы данных. Потом удалить его вместе с формой. Ну то есть тут тоже нужно смотреть и выбирать, как удобнее.

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

Много мнений, есть интересные идеи
Ну в общем, это как мебель подбирать и расставлять для квартиры - тут могут тебе надавать десятки советов самых разных, а выбирать и расставлять все равно тебе (и жене :) ).
15 окт 17, 17:08    [20870813]     Ответить | Цитировать Сообщить модератору
 Re: Связать класс и форму TForm  [new]
s62
Member

Откуда: Жуковский
Сообщений: 700
s62, на всякий случай,
конечно же не всегда
выделить ее отдельно, а в OnClick добавить вызов процедуры

так тоже
достаточно обработки Button1Click
16 окт 17, 12:48    [20872469]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Delphi Ответить