powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Общие принципы построения приложения в FoxPro
25 сообщений из 424, страница 12 из 17
Общие принципы построения приложения в FoxPro
    #38149377
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Как видите, вы сами подробно и в детялях подтверждаете то что сами и отрицаете - вы все делаете в формах.
И даже удивляетесь - зачем вам нужны классы.
Фактически это не ООП, без него вы обходитесь - разве что частично используете некоторые его удобные вам моменты с формами.
Но VFP9 заточено под объектно-ориентированное программирование.
Класс формы не класс? Изумительное измышление
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38149389
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, ТС уже показал, "как надо", или всё ещё только критикует?
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38149402
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirDima T, ТС уже показал, "как надо", или всё ещё только критикует?
Он похоже еще не до конца определился "как не надо"
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38149486
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12можно ведь еще вызывать и класс формы и динамически добавлять/убирать хотя бы тот же Control.
А что мешает это делать в форме созданной на основе этого класса формы?
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38149516
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMsg12Попробуйте начать хоть что-то добавлять даже готовенькое и ваши трудом отлаженные кодохранилища начнут опухать.А кто сказал, что элементы форм - это объекты базовых классов? Вроде бы общепринятая практика (у тех, кто действительно программировал на VFP) - в первую очередь сделать свой набор объектов. А вы тут им рассказываете, что они ООП не пользуют...

Прочтите еще раз внимательно его описания, многое вначале темы - там нет даже упоминаний о классах и наборах объектов, разве что где мимоходом.
Хотя с этого и надо начинать описания, т.к. там все происходит - в событиях, методах, свойствах объектов.
Он даже удивляется - зачем они?
Единственный класс, которым он оперирует - это класс форм, где все и происходит - своеобразная форма процедурного программирования, но это не ООП.
А то, что местами используется, погоды не делает.

ДимаТ. Ничто вам не мешает так делать, если вам так хочется.
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38150260
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Хотя с этого и надо начинать описания, т.к. там все происходит - в событиях, методах, свойствах объектов.
Ну так мы тут уже заждались (попкорном обжравшись) когда нам лекцию прочитает товарищ "я знаю как правильно делать", или это сокращение от "я знаю как правильно делать, но не умею потому что никогда не делал" ?
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38150318
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12С числовыми полями порой красиво смотрятся маленькие калькуляторы, в полях типа дата - календарики.
Убил бы!
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38151243
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tsg12Хотя с этого и надо начинать описания, т.к. там все происходит - в событиях, методах, свойствах объектов.
Ну так мы тут уже заждались (попкорном обжравшись) когда нам лекцию прочитает товарищ "я знаю как правильно делать", или это сокращение от "я знаю как правильно делать, но не умею потому что никогда не делал" ?

Вы удивитесь, но лекции по ООП в VFP9 есть готовые и они вполне доступны.
Лекции на русском языке, неплохо переведены.
Находятся они в HELP, вместе с описаниями учебных примеров.
Изучайте на здоровье.
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38151249
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНа все типовые случаи есть готовый класс формы, в котором все прописано, остается только нужные свойства донастроить.

Это сколько же бессмысленного труда потрачено ...
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38151439
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Dima TНа все типовые случаи есть готовый класс формы, в котором все прописано, остается только нужные свойства донастроить.

Это сколько же бессмысленного труда потрачено ...
Не переживай. Пять лет назад закончил писать и больше не возвращаюсь к этому вопросу. Только пользуюсь.
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38151868
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tsg12пропущено...


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

Ого, пять лет!
Плюс еще года два, как в сундук, в форму все подряд запихивали что влезало.
Какая тут к черту модернизация, нафиг она нужна - интересно даже взглянуть на такой шедевр.
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38151983
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12 интересно даже взглянуть на такой шедевр.
Смысл? Все равно ничего не поймешь. Куча абстрактного кода и макроподстановок. Некоторые места я сам уже не помню зачем написаны, но раз написано - значит надо. Документацию я делать не собираюсь, нет ни желания, ни времени.
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38152004
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tthunder2Теперь меняем тип столбца таблицы с Charater на, например, Numeric или с Charater на Memo (столбец, естественно, редактируется в нашей форме). Что произойдёт в форме ? Как она отреагирует ?
Если поменять тип поля то ничего криминального в форме не случится. Текстбоксу без разницы какой тип поля ему достался. Гриду тоже.
Другое дело код где это поле используется, его весь перелопатить придется. По-хорошему о типе поля надо думать на этапе проектирования.
Я венгерскую нотацию использую. Первый символ в названии поля - тип, поэтому при смене типа изменится имя поля.
Исключение разве что изменение размера символьного поля. Тут текстбокс надо поправить (.MaxLenght)
thunder2Второй вопрос: в нашу таблицу мы добавили столбец. Что мне надо сделать чтобы предоставить возможность редактирования значения этого столбца в форме (столбец имеет скалярный тип данных) ?
Спасибо заранее.
Открыть DE, вытащить поле мышкой на форму, сменить label.caption и порядок обхода записей поправить.
Если используется курсор-адаптер - сначала поправить его.

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

Ок. А после внесения изменений в контролах какой код выполняет сохранение ? Код формы или ... ?
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38152010
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thunder2Ок. А после внесения изменений в контролах какой код выполняет сохранение ? Код формы или ... ?
В форме. Буферизация и TableUpdate() для сохранения.
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38152011
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополню (предвидя опусы от sg12) TableUbdate() написан в классе формы правки.
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38152032
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДополню (предвидя опусы от sg12) TableUbdate() написан в классе формы правки.

Код класса покажи, ... для файл-сервераидля клиент-сервера.
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38152130
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tthunder2Ок. А после внесения изменений в контролах какой код выполняет сохранение ? Код формы или ... ?
В форме. Буферизация и TableUpdate() для сохранения.

Вооот, наконец-то добрался до главного ! Я такую логику переношу в класс модели, форма же имеет ссылку на объект модели и просто вызывает нужные методы в нужный момент, т.е. я применяют шаблон MVC. Как такое решение ?
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38152750
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tsg12 интересно даже взглянуть на такой шедевр.
Смысл? Все равно ничего не поймешь. Куча абстрактного кода и макроподстановок. Некоторые места я сам уже не помню зачем написаны, но раз написано - значит надо. Документацию я делать не собираюсь, нет ни желания, ни времени.

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

Вопрос вам:
Неужто за восемь лет вы только сейчас узнали о существовании в VFP9 других классов, кроме класса форм?
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38152755
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДополню (предвидя опусы от sg12) TableUbdate() написан в классе формы правки.

Это можно.
Таблицы ведь могут обновляться не только из ваших форм, но и из других мест (автообновление, интернет, другая программа, триггеры, toolbar и т.д.).
В таких случаях вы где создаете свои кодохранилища?
К примеру, объясните своему ученику, как ваше TABLEUPDATE() в его "класс модели" нужно перетаскивать... мышкой.
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38152851
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWistDima TДополню (предвидя опусы от sg12) TableUbdate() написан в классе формы правки.

Код класса покажи, ... для файл-сервераидля клиент-сервера.
Выше написал - не хочу выкладывать. Без подробных объяснений понимать сложно будет. Спрашивай чего конкретно интересует. Сразу предупрежу - ничего особо экзотического я не изобрел. Все что можно было сделать просто - сделано просто.
TableUbdate() для обоих вариантов один и тот же:
clsFormEdit.Save()
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
local lcErr
if tableupdate(0, .T., thisform.cTable)
	lcErr = 'Ok'
else
	local array laErr[7]
	aerror(laErr)
	lcErr = laErr[1,2] + ' (' + alltrim(str(laErr[1,1])) + ')'
	if '[SQL Server]' $ lcErr
		lcErr = substr(lcErr, at('[SQL Server]', lcErr) + 13)
	endif
	do case
		case 'cannot insert duplicate key row' $ lcErr
			lcErr = 'Такая запись уже есть. ' + lcErr 
		case 'cannot insert an empty row' $ lcErr
			lcErr = 'Не заполнено ни одно поле. ' + lcErr 
	endcase
endif
return lcErr


thunder2Вооот, наконец-то добрался до главного ! Я такую логику переношу в класс модели, форма же имеет ссылку на объект модели и просто вызывает нужные методы в нужный момент, т.е. я применяют шаблон MVC. Как такое решение ?
MVC это один из подходов к разработке, сам по себе он ни плох, ни хорош. Все зависит от конкретной реализации. Я бы даже сказал от общей идеологии разработки, которая включает в себя в т.ч. подход к проектированию БД.
Пробовал что-то подобное, но потом отказался от такого подхода, т.к. лично мне принципиально максимально вынести контроль целостности на уровень БД (связи, триггеры и т.п.), чтобы БД не была привязана к конкретному приложению. Поэтому на уровне приложения остается только сохранить и проверить на ошибки. Поэтому в большинстве случаев надобности нет в излишних классах (писать туда нечего). Классы типа "контроллеров" нужны в случаях какой-то сложной логики, которую в БД не вынести, но с ними в каждом случае все индивидуально, поэтому нет смысла выносить их в какой-то глобальный класс на все случаи жизни.
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38152857
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Dima Tпропущено...

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

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

Вопрос вам:
Неужто за восемь лет вы только сейчас узнали о существовании в VFP9 других классов, кроме класса форм?
Даже не знаю чего и сказать на этот бред.
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38152939
GermanGM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как много умных слов - и какой идиотский вопрос :)
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38153071
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TPaulWistпропущено...


Код класса покажи, ... для файл-сервера и для клиент-сервера.
Выше написал - не хочу выкладывать. Без подробных объяснений понимать сложно будет. Спрашивай чего конкретно интересует. Сразу предупрежу - ничего особо экзотического я не изобрел. Все что можно было сделать просто - сделано просто.
TableUbdate() для обоих вариантов один и тот же:



ОК, мне схема интересна :)

Код: sql
1.
2.
if tableupdate(0, .T., thisform.cTable)
	lcErr = 'Ok'



Ну давай по порядку, вопросы (пока смотрим файл-сервер):

1. Где начинается и заканчивается транзакция, в каком месте класса-формы?

2. Как и где происходит присвоение thisform.cTable, а если таблиц больше чем одна, как в thisform.cTable попадают имена алиасов?

3. Где "готовятся" сами данные, например для связки Мастер-Детали, те в каком месте в деталях присваивается PK Мастера?

4. Правильно ли я понимаю, что с фоксовские ХП для сохранения данных ты не используешь, а если используешь, то как в них передаешь код сохранения метода clsFormEdit.Save(), что бы сохранить данные.
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38153222
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tsg12пропущено...


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

Вопрос вам:
Неужто за восемь лет вы только сейчас узнали о существовании в VFP9 других классов, кроме класса форм?
Даже не знаю чего и сказать на этот бред.

Почему же бред?

Пока из ООП вы демонстрируете некоторое знакомство только с несколькими объектами, которые научились перетаскивать мышкой на форму.
А формы перегоняете в классы с помощью "SAVE AS ..."
И только сейчас начали узнавать, что в VFP можно создавать свои классы и собирать их в библиотеки классов, и еще многое чего такого.
Даже на уровне кнопок вы плаваете с их заполнением.
Не говоря уже о невизуальных классах, которые оставят в ваших учебно-тестовых формах одни картинки.

Апломбу у вас хватает, но вы тут же тушуетесь, когда доходит до конкретики.
Для нормального освоения ООП вам понадобится года полтора.
Если же выложите свои классы, то дело пойдет быстрее - этак страниц на пятьдесят.
К заданным вопросам по-порядку можно будет добавлять новые номера, с разрешения инициатора.
И на форуме станет веселее - и развлечение, и обучение.
...
Рейтинг: 0 / 0
Общие принципы построения приложения в FoxPro
    #38153316
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWistНу давай по порядку, вопросы (пока смотрим файл-сервер):
Заточка изначальная была под КА для работы с MSSQL.

PaulWist1. Где начинается и заканчивается транзакция, в каком месте класса-формы?
С том случае нет транзакций. Оптимистическая буферизация.
Buffering = 3

PaulWist2. Как и где происходит присвоение thisform.cTable, а если таблиц больше чем одна, как в thisform.cTable попадают имена алиасов?
3. Где "готовятся" сами данные, например для связки Мастер-Детали, те в каком месте в деталях присваивается PK Мастера?
То что я выше показывал это код формы правки справочника, т.е. одной записи одной таблицы.
Для документа с табличной частью другая форма (clsFormDocEdit), унаследованная от этой. По сути та же правка записи только вместе с ссылающимися на нее из дочерней таблицы.
Там добавлен курсор-адаптер для дочерней thisform.cChildTable (Buffering = 5) и метод Save() перепрописан. Там в транзакцию обернуто внутри Save(). Для MSSQL SQLEXEC('begin tran')
В родительской nМастерID появляется после сохранения. Для MS SQL "select @@IDENTITY"
В процессе ввода при добавлении записей в дочернюю в nМастерID ничего не пишется. В процессе сохранения заменяется на Мастер.nМастерID
clsFormDocEdit.Save()
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
local lcErr, lnId
lcErr = ThisForm.OpenTran()
if lcErr = 'Ok'
	lcErr = clsFormEdit::Save() && Сохраняем родительскую (мастера) и тут получаем nМастерID при добавлении
	if lcErr = 'Ok'
		* Проставляем добавленным деталям код мастера и сохраняем
		lnId = eval(ThisForm.cTable + '.' + ThisForm.cIdField)
		repl empty(eval(ThisForm.cChildTable + '.' + ThisForm.cIdField)) in (ThisForm.cChildTable) (ThisForm.cIdField) with lnId
		if TableUpdate(.T., .T., ThisForm.cChildTable)
			lcErr = 'Ok'
		else
			...
		endif
	endif
	if lcErr = 'Ok'
		lcErr = ThisForm.CommitTran()
	endif
	if lcErr != 'Ok'
		ThisForm.RollbackTran()
	endif
endif
return lcErr


в твоем примере:
cTable = 'Мастер'
cIDfield = 'nМастерID'
cChildTable = 'Деталь'

PaulWist4. Правильно ли я понимаю, что с фоксовские ХП для сохранения данных ты не используешь, а если используешь, то как в них передаешь код сохранения метода clsFormEdit.Save(), что бы сохранить данные.
ХП ни фоксовые ни MSSQL я не использую для простых сохранений. Просто пишу в таблицу, если что-то надо попутно менять, то это прописываю в триггерах БД.
...
Рейтинг: 0 / 0
25 сообщений из 424, страница 12 из 17
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Общие принципы построения приложения в FoxPro
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]