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

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

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

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

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

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

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

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

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




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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

Попробовал. Нерабочий вариант: программа как была одним куском так и осталась одним куском. Только по файлам ради красоты растащили. Ничего по существу не поменялось.
...
Рейтинг: 0 / 0
19.12.2012, 17:22
    #38085512
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
GermanVТолько по файлам ради красоты растащили.
Ну так ты же жаловался только на то, что "неудобно листать код на 100 страниц". А
неиспользуемые процедуры с синтаксическими ошибками проще закомментировать если не хватает
времени пофиксить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.12.2012, 17:35
    #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
19.12.2012, 17:43
    #38085558
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
GermanVКак эту функцию погрузить в свое пространство имен, и как ее видеть из
общего файла?
#include
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.12.2012, 17:54
    #38085581
GermanV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
Dimitry SibiryakovGermanVКак эту функцию погрузить в свое пространство имен, и как ее видеть из
общего файла?
#include


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

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

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

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

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

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


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


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

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

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

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

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


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

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


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

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


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

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

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

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

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


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

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


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

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

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

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

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

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


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