![]() |
|
![]() ![]() ![]() |
|
valeriyzf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 11.2.2010 Репутация: нет Всего: нет |
В своем проекте я пользуюсь глобальным массивом данных и глобальными классами данных. Соответственно напоролся на критику ярых противников глобальных переменных. Но как по другому организовать структуру (принцип) работы проекта?, если:
Моя программа: 1) Открывает файл с данными и заливает их в глобальный массив. 2) Другая процедура обрабатывает эти данные (ведутся пересчеты через множество матриц преоброзований и поворотов в пространстве) 3) Третья - заполняет глобальные классы полученными (после обработки) данными. 4) В 4-й процедуре из этих классов берутся данные и по ним рисуется 3D картинка, которую юзер может двигать, вращать, масштабировать и т.д. Весь мой проект разбит на разные процедуры, которые, в свою очередь, распределены по нескольким модулям. Если одна процедура пересчитывает данные, то картинку рисует совершенно другая процедура. Вместе они могут работать только с глобальным массивом данных или внешними таблицами. Если не пользоваться глобальными массивами, то мне при каждом повороте картинки (по команде пользователя) придется начинать все с начала: открывать файл, пересчитывать данные и только потом рисовать. В этом случае картинка будет тормозить непомерно. С глобальными же классами, все уже готовенькие данные лежат в них, соответственно шаги 1 - 3 пропускаются, и все работает быстро. Другой вариант - создавать временные таблицы и потом работать с ними в SQL. Но это более универсальные метод подходит для огромного числа данных (десятки и сотни тысяч записей). В моем же случае это не более 2000 строк. Хотелось найти более простое решение. Спасибо! |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
Всегда есть возможность передать функции указатели (или ссылки) на данные, с которыми ей нужно работать
Таким образом для каждой функции будет чётко описано, какие данные она может потенциально изменить, а какие - нет. При отладке и при внесении изменений в программу помогает. сами данные можно хранить, где угодно: в куче, в стеке какой-нибудь функции можно даже хранить их на протяжении работы всей программы, т.е. так же, как и глобальные переменные, главное, чтобы доступ не был "ко всему отовсюду" - именно это основная проблема глобальных переменных -------------------- qqq |
|||
|
||||
valeriyzf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 11.2.2010 Репутация: нет Всего: нет |
С архитектурой проекта я уже разобрался.
Создал класс для решения всей задачи в целом. В этот класс вошли все мои дополнительные под-классы, массивы и процедуры. Все получилось довольно аккуратно и логично. Но вот напоролся на следующую проблему (собственно эта проблема описана в другой теме http://forum.vingrad.ru/forum/topic-291000.html): Как управлять компонентами формы из другого модуля. У меня на главной форме следующие компоненты: 1) DataGridView (таблица данных) 2) ListBox 3) TrackBar (управление 3D картинкой) 4) <Graphic> (собственно, сама картинка на форме) Если все процедуры и функции обработки этих компонент описать в заголовочном файле "Form1.h", то файл превратится в книгу "Архипелаг Гулаг" в txt формате. Получить же доступ к управлению формы из других модулей не получается. Проблема была частично решена для графики и некоторых простых компонентов ("button1", "label1"). Но управлять желаемыми компонентами (DataGridView, ListBox) из других модулей так и не получается. |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |