powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
25 сообщений из 33, страница 1 из 2
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38084618
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть проект MFC, представляющий из себя форму с порядка 10-ю кнопками. У этих кнопок подцеплены свои обработчики (иногда один обработчик вызывает процедуру другого обработчика).

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

Хочется: одна форма с 10-ю кнопками. Процедура каждой кнопки компилируется отдельно (значит для нее создан отдельный проект в рамках решения). Все эти проекты используют общую библиотеку (набор моих функций и классов).

Получится ли вызывать из одного проекта процедуру другого проекта? Можно ссылку, где подобное разбиение на проекты / библиотеки реализовано?
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38084678
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GermanV,

Создаешь в своем решении(solution) проект(ы) dll, в этих dll описываешь свои процедуры (то есть методы). Потом подключаешь в основной проект(там где форма с кнопками) namespace из той dll, где описан метод, который должен вызываться.
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38084877
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanV,

Этот вопрос лучше конечно обсудить в форуме по проектированию. Если вкратце, на самом первом этапе нужно разбивать приложение не по единицам модульности языка (функции, файлы, классы), а по функционалу на слои. Форма у вас - это слой отображения, она должна быть очень слабо связана со слоем логики, в проектировании UI называемом моделью. Сама модель может у вас делиться на несколько, тоже по функциональности (например если форма у вас сводная). Так же вы можете для еще меньшей связности использовать посредника между формой и моделью.

Все описанное может взаимодействовать по различным методологиям, это например новомодные MVC, MVVM, или классические для десктоп приложений ViewModel. Применив такой метод декомпозиции вам уже не придется задумываться как же весь код разбить на проекты, решения и файлы. Все станет и так очевидно.

Хотя судя по вашему описанию у вас даже нет ООП. Если совсем коротко - выносите всë в классы по функционалу. Ключевые слова: проектирование UI, ViewModel, Qt View/Model, MVVM.
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38084878
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть проект MFC, представляющий из себя форму с порядка 10-ю кнопками. У этих кнопок подцеплены свои обработчики (иногда один обработчик вызывает процедуру другого обработчика).

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




——
Идеально было бы просто отделить обработку данных от управления этой обработкой (формы).
Mvc например....

Хочется: одна форма с 10-ю кнопками. Процедура каждой кнопки компилируется отдельно (значит для нее создан отдельный проект в рамках решения).

--
Нет, это вовсе это не значит.

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

Получится ли вызывать из одного проекта процедуру другого проекта?

Проект — это способ организации компиляции. Это не способ организации кода. Проекты бывают разные. Я знаю как минимум 3 типа: приложение, динамическая библиотека, статическая библиотека. Соответственно, в зависимости от того, как ты это сделаешь, оно будет либо возможно, либо нет.

Можно ссылку, где подобное разбиение на проекты / библиотеки реализовано?

Думаю, пример тут не нужен. Нужно понимание принципа. Но если пример нужен, его легко можно найти, хотя бы в msdn.
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38084935
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVзначит для нее создан отдельный проект в рамках решения
Не нужно создавать отдельный проект. Достаточно модуля (отдельный cpp файл).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085295
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wvetalGermanV,

Создаешь в своем решении(solution) проект(ы) dll, в этих dll описываешь свои процедуры (то есть методы). Потом подключаешь в основной проект(там где форма с кнопками) namespace из той dll, где описан метод, который должен вызываться.

А я смогу из одной dll использовать метод другой dll? Как изменится производительность?
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085304
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivЕсть проект MFC, представляющий из себя форму с порядка 10-ю кнопками. У этих кнопок подцеплены свои обработчики (иногда один обработчик вызывает процедуру другого обработчика).

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

——
Идеально было бы просто отделить обработку данных от управления этой обработкой (формы).
Mvc например....

Теоретически и мне это понятно, а как практически?

MasterZivНет, это вовсе это не значит.

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


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

MasterZivПроект — это способ организации компиляции. Это не способ организации кода. Проекты бывают разные. Я знаю как минимум 3 типа: приложение, динамическая библиотека, статическая библиотека. Соответственно, в зависимости от того, как ты это сделаешь, оно будет либо возможно, либо нет.

Я про это и спрашиваю: как сделать?
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085309
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovGermanVзначит для нее создан отдельный проект в рамках решения
Не нужно создавать отдельный проект. Достаточно модуля (отдельный cpp файл).


А ошибки одного из cpp- файлов позволят мне запустить на отладку другой cpp- файл?
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085322
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GermanVwvetalGermanV,

Создаешь в своем решении(solution) проект(ы) dll, в этих dll описываешь свои процедуры (то есть методы). Потом подключаешь в основной проект(там где форма с кнопками) namespace из той dll, где описан метод, который должен вызываться.

А я смогу из одной dll использовать метод другой dll? Как изменится производительность?

+ А чтобы ошибки одной dll НИКАК не мешали работать с другой dll мне поможет позднее связывание dll? Или синтаксический контроль делается в любом случае на этапе построения?
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085474
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GermanVА ошибки одного из cpp- файлов позволят мне запустить на отладку другой cpp- файл?

Попробовал. Нерабочий вариант: программа как была одним куском так и осталась одним куском. Только по файлам ради красоты растащили. Ничего по существу не поменялось.
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085512
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVТолько по файлам ради красоты растащили.
Ну так ты же жаловался только на то, что "неудобно листать код на 100 страниц". А
неиспользуемые процедуры с синтаксическими ошибками проще закомментировать если не хватает
времени пофиксить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085544
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создал дополнительный cpp- файл с функцией:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#include "stdafx.h"

void MyFunc1()
{
	int a = 1;
	int b;

	if(a == 2) 
		b = 5;
	else 
		b = 7;
}



Создал файл заголовка:
Код: plaintext
1.
void MyFunc1(void);



Как эту функцию погрузить в свое пространство имен, и как ее видеть из общего файла?
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085558
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVКак эту функцию погрузить в свое пространство имен, и как ее видеть из
общего файла?
#include
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085581
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovGermanVКак эту функцию погрузить в свое пространство имен, и как ее видеть из
общего файла?
#include


Вообще-то #include ничего никуда не погружает.

Можно конкретно написать?
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085588
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVwvetalGermanV,

Создаешь в своем решении(solution) проект(ы) dll, в этих dll описываешь свои процедуры (то есть методы). Потом подключаешь в основной проект(там где форма с кнопками) namespace из той dll, где описан метод, который должен вызываться.

А я смогу из одной dll использовать метод другой dll? Как изменится производительность?

Сможешь. Никак.
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085597
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanV
MasterZivНет, это вовсе это не значит.

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


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


Для этого достаточно разбить на разные исходные модули (файлы *.cpp или *.c)
ГРУБО ГОВОРЯ: Берёшь один исходник, копируешь с другим именем, открываеш в редакторе и выкидываешь всё, что НЕ хочешь видеть в данном исходнике. Потом выкидываешь всё, что осталось, из исходного исходника.

GermanV
Теоретически и мне это понятно, а как практически?

Я про это и спрашиваю: как сделать?

Там куча нюансов, зависящих именно от твоего кода. Как и на что его разделять -- твои проблемы, их никто за тебя не решит.
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085600
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVDimitry Sibiryakovпропущено...

Не нужно создавать отдельный проект. Достаточно модуля (отдельный cpp файл).


А ошибки одного из cpp- файлов позволят мне запустить на отладку другой cpp- файл?

Нет. Для этого нужно будет как минимум создать тестовое приложение.
Или написать тесты на чём-то типа CppUnit (собственно, это тестовое приложение и есть).
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085607
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanV+ А чтобы ошибки одной dll НИКАК не мешали работать с другой dll мне поможет позднее связывание dll?


Нет. Не поможет. Оно тут вообще ни при чём.

GermanV Или синтаксический контроль делается в любом случае на этапе построения?


Синтаксический контроль делается на этапе компиляции. Это что идёт перед сборкой.
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085609
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVGermanVА ошибки одного из cpp- файлов позволят мне запустить на отладку другой cpp- файл?

Попробовал. Нерабочий вариант: программа как была одним куском так и осталась одним куском. Только по файлам ради красоты растащили. Ничего по существу не поменялось.

Это не так. Поменялось. И ты это сам уже понял -- появилась КРАСОТА !
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085613
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanV
Как эту функцию погрузить в свое пространство имен, и как ее видеть из общего файла?

Это не понятный пост. Она уже там, в пространстве имён, общем.
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085640
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVВообще-то #include ничего никуда не погружает.
Ну, если "погружает" это не "подгружает" с опечаткой, то таки да. А что ты называешь
"погружать"?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085688
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivДля этого достаточно разбить на разные исходные модули (файлы *.cpp или *.c)
ГРУБО ГОВОРЯ: Берёшь один исходник, копируешь с другим именем, открываеш в редакторе и выкидываешь всё, что НЕ хочешь видеть в данном исходнике. Потом выкидываешь всё, что осталось, из исходного исходника.

Так ошибки-то этой выкинутой процедуры не позволят компилировать проект. К тому же при вызове функций других cpp- файлов приходится добавлять их h-файлы, что приводит о повторном использовании одного и того же символа(LNK2005).
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085693
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivGermanV+ А чтобы ошибки одной dll НИКАК не мешали работать с другой dll мне поможет позднее связывание dll?


Нет. Не поможет. Оно тут вообще ни при чём.

GermanV Или синтаксический контроль делается в любом случае на этапе построения?


Синтаксический контроль делается на этапе компиляции. Это что идёт перед сборкой.

Я про то, что есть раннее связывание- dll загружается в память на этапе запуска приложения и позднее связывание- функции dll загружаются в память в момент их вызова. Зачем же при позднем связывании делать какие-то контроли всего и вся? К тому же dll вроде как должна быть уже откомпилирована, зачем ее предварительно контролировать синтаксически?
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085699
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivGermanVКак эту функцию погрузить в свое пространство имен, и как ее видеть из общего файла?

Это не понятный пост. Она уже там, в пространстве имён, общем.

Я хочу в отдельном файле cpp создать свое пространство имен, в котором определить функцию. И потом эту функцию из моего пространства имен использовать в диалоге формы, как обработчик нажатия клавиши.
...
Рейтинг: 0 / 0
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
    #38085755
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVMasterZivДля этого достаточно разбить на разные исходные модули (файлы *.cpp или *.c)
ГРУБО ГОВОРЯ: Берёшь один исходник, копируешь с другим именем, открываеш в редакторе и выкидываешь всё, что НЕ хочешь видеть в данном исходнике. Потом выкидываешь всё, что осталось, из исходного исходника.

Так ошибки-то этой выкинутой процедуры не позволят компилировать проект. К тому же при вызове функций других cpp- файлов приходится добавлять их h-файлы, что приводит о повторном использовании одного и того же символа(LNK2005).

Это тебе тогда в школу надо...
Я тебе сейчас не смогу быстро это все объяснить.
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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