Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
Есть проект MFC, представляющий из себя форму с порядка 10-ю кнопками. У этих кнопок подцеплены свои обработчики (иногда один обработчик вызывает процедуру другого обработчика). Все это свалено в модуле формы, поэтому содержит потенциальную ошибку взаимных влияний кода. Да и неудобно листать код на 100 страниц в поисках нужного куска. Иногда одни процедуры не дают построить решение, хотя в данный момент они не используются. Хочется: одна форма с 10-ю кнопками. Процедура каждой кнопки компилируется отдельно (значит для нее создан отдельный проект в рамках решения). Все эти проекты используют общую библиотеку (набор моих функций и классов). Получится ли вызывать из одного проекта процедуру другого проекта? Можно ссылку, где подобное разбиение на проекты / библиотеки реализовано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 10:54 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanV, Создаешь в своем решении(solution) проект(ы) dll, в этих dll описываешь свои процедуры (то есть методы). Потом подключаешь в основной проект(там где форма с кнопками) namespace из той dll, где описан метод, который должен вызываться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 11:32 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanV, Этот вопрос лучше конечно обсудить в форуме по проектированию. Если вкратце, на самом первом этапе нужно разбивать приложение не по единицам модульности языка (функции, файлы, классы), а по функционалу на слои. Форма у вас - это слой отображения, она должна быть очень слабо связана со слоем логики, в проектировании UI называемом моделью. Сама модель может у вас делиться на несколько, тоже по функциональности (например если форма у вас сводная). Так же вы можете для еще меньшей связности использовать посредника между формой и моделью. Все описанное может взаимодействовать по различным методологиям, это например новомодные MVC, MVVM, или классические для десктоп приложений ViewModel. Применив такой метод декомпозиции вам уже не придется задумываться как же весь код разбить на проекты, решения и файлы. Все станет и так очевидно. Хотя судя по вашему описанию у вас даже нет ООП. Если совсем коротко - выносите всë в классы по функционалу. Ключевые слова: проектирование UI, ViewModel, Qt View/Model, MVVM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 12:50 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
Есть проект MFC, представляющий из себя форму с порядка 10-ю кнопками. У этих кнопок подцеплены свои обработчики (иногда один обработчик вызывает процедуру другого обработчика). Все это свалено в модуле формы, поэтому содержит потенциальную ошибку взаимных влияний кода. Да и неудобно листать код на 100 страниц в поисках нужного куска. Иногда одни процедуры не дают построить решение, хотя в данный момент они не используются. —— Идеально было бы просто отделить обработку данных от управления этой обработкой (формы). Mvc например.... Хочется: одна форма с 10-ю кнопками. Процедура каждой кнопки компилируется отдельно (значит для нее создан отдельный проект в рамках решения). -- Нет, это вовсе это не значит. На самом деле тебе скорее всего это не нужно, а нужно просто навести порядок в коде. Для этого разбиение на проекты не обязательно нужно, а в твоем случая я думаю даже вредно, потому что ты будешь вместо организации кода думать о организации проектов. А лучшее организовать именно код, потом, после, если будет надо, сможешь сделать и это. -- Получится ли вызывать из одного проекта процедуру другого проекта? Проект — это способ организации компиляции. Это не способ организации кода. Проекты бывают разные. Я знаю как минимум 3 типа: приложение, динамическая библиотека, статическая библиотека. Соответственно, в зависимости от того, как ты это сделаешь, оно будет либо возможно, либо нет. Можно ссылку, где подобное разбиение на проекты / библиотеки реализовано? Думаю, пример тут не нужен. Нужно понимание принципа. Но если пример нужен, его легко можно найти, хотя бы в msdn. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 12:50 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanVзначит для нее создан отдельный проект в рамках решения Не нужно создавать отдельный проект. Достаточно модуля (отдельный cpp файл). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 13:15 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
wvetalGermanV, Создаешь в своем решении(solution) проект(ы) dll, в этих dll описываешь свои процедуры (то есть методы). Потом подключаешь в основной проект(там где форма с кнопками) namespace из той dll, где описан метод, который должен вызываться. А я смогу из одной dll использовать метод другой dll? Как изменится производительность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 15:32 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
MasterZivЕсть проект MFC, представляющий из себя форму с порядка 10-ю кнопками. У этих кнопок подцеплены свои обработчики (иногда один обработчик вызывает процедуру другого обработчика). Все это свалено в модуле формы, поэтому содержит потенциальную ошибку взаимных влияний кода. Да и неудобно листать код на 100 страниц в поисках нужного куска. Иногда одни процедуры не дают построить решение, хотя в данный момент они не используются. —— Идеально было бы просто отделить обработку данных от управления этой обработкой (формы). Mvc например.... Теоретически и мне это понятно, а как практически? MasterZivНет, это вовсе это не значит. На самом деле тебе скорее всего это не нужно, а нужно просто навести порядок в коде. Для этого разбиение на проекты не обязательно нужно, а в твоем случая я думаю даже вредно, потому что ты будешь вместо организации кода думать о организации проектов. А лучшее организовать именно код, потом, после, если будет надо, сможешь сделать и это. Нет, мне нужно, чтобы ошибки одной процедуры НИКАК не влияли на компеляцию другой процедуры. И я хочу устранить даже малейшую теоретическую возможность взаимных влияний (чтобы голова не болела на эту тему). MasterZivПроект — это способ организации компиляции. Это не способ организации кода. Проекты бывают разные. Я знаю как минимум 3 типа: приложение, динамическая библиотека, статическая библиотека. Соответственно, в зависимости от того, как ты это сделаешь, оно будет либо возможно, либо нет. Я про это и спрашиваю: как сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 15:38 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovGermanVзначит для нее создан отдельный проект в рамках решения Не нужно создавать отдельный проект. Достаточно модуля (отдельный cpp файл). А ошибки одного из cpp- файлов позволят мне запустить на отладку другой cpp- файл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 15:40 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanVwvetalGermanV, Создаешь в своем решении(solution) проект(ы) dll, в этих dll описываешь свои процедуры (то есть методы). Потом подключаешь в основной проект(там где форма с кнопками) namespace из той dll, где описан метод, который должен вызываться. А я смогу из одной dll использовать метод другой dll? Как изменится производительность? + А чтобы ошибки одной dll НИКАК не мешали работать с другой dll мне поможет позднее связывание dll? Или синтаксический контроль делается в любом случае на этапе построения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 15:47 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanVА ошибки одного из cpp- файлов позволят мне запустить на отладку другой cpp- файл? Попробовал. Нерабочий вариант: программа как была одним куском так и осталась одним куском. Только по файлам ради красоты растащили. Ничего по существу не поменялось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 17:01 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanVТолько по файлам ради красоты растащили. Ну так ты же жаловался только на то, что "неудобно листать код на 100 страниц". А неиспользуемые процедуры с синтаксическими ошибками проще закомментировать если не хватает времени пофиксить. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 17:22 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
Создал дополнительный cpp- файл с функцией: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Создал файл заголовка: Код: plaintext 1. Как эту функцию погрузить в свое пространство имен, и как ее видеть из общего файла? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 17:35 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanVКак эту функцию погрузить в свое пространство имен, и как ее видеть из общего файла? #include Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 17:43 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovGermanVКак эту функцию погрузить в свое пространство имен, и как ее видеть из общего файла? #include Вообще-то #include ничего никуда не погружает. Можно конкретно написать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 17:54 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanVwvetalGermanV, Создаешь в своем решении(solution) проект(ы) dll, в этих dll описываешь свои процедуры (то есть методы). Потом подключаешь в основной проект(там где форма с кнопками) namespace из той dll, где описан метод, который должен вызываться. А я смогу из одной dll использовать метод другой dll? Как изменится производительность? Сможешь. Никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 17:57 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanV MasterZivНет, это вовсе это не значит. На самом деле тебе скорее всего это не нужно, а нужно просто навести порядок в коде. Для этого разбиение на проекты не обязательно нужно, а в твоем случая я думаю даже вредно, потому что ты будешь вместо организации кода думать о организации проектов. А лучшее организовать именно код, потом, после, если будет надо, сможешь сделать и это. Нет, мне нужно, чтобы ошибки одной процедуры НИКАК не влияли на компеляцию другой процедуры. И я хочу устранить даже малейшую теоретическую возможность взаимных влияний (чтобы голова не болела на эту тему). Для этого достаточно разбить на разные исходные модули (файлы *.cpp или *.c) ГРУБО ГОВОРЯ: Берёшь один исходник, копируешь с другим именем, открываеш в редакторе и выкидываешь всё, что НЕ хочешь видеть в данном исходнике. Потом выкидываешь всё, что осталось, из исходного исходника. GermanV Теоретически и мне это понятно, а как практически? Я про это и спрашиваю: как сделать? Там куча нюансов, зависящих именно от твоего кода. Как и на что его разделять -- твои проблемы, их никто за тебя не решит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 18:01 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanVDimitry Sibiryakovпропущено... Не нужно создавать отдельный проект. Достаточно модуля (отдельный cpp файл). А ошибки одного из cpp- файлов позволят мне запустить на отладку другой cpp- файл? Нет. Для этого нужно будет как минимум создать тестовое приложение. Или написать тесты на чём-то типа CppUnit (собственно, это тестовое приложение и есть). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 18:02 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanV+ А чтобы ошибки одной dll НИКАК не мешали работать с другой dll мне поможет позднее связывание dll? Нет. Не поможет. Оно тут вообще ни при чём. GermanV Или синтаксический контроль делается в любом случае на этапе построения? Синтаксический контроль делается на этапе компиляции. Это что идёт перед сборкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 18:04 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanVGermanVА ошибки одного из cpp- файлов позволят мне запустить на отладку другой cpp- файл? Попробовал. Нерабочий вариант: программа как была одним куском так и осталась одним куском. Только по файлам ради красоты растащили. Ничего по существу не поменялось. Это не так. Поменялось. И ты это сам уже понял -- появилась КРАСОТА ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 18:05 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanV Как эту функцию погрузить в свое пространство имен, и как ее видеть из общего файла? Это не понятный пост. Она уже там, в пространстве имён, общем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 18:07 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanVВообще-то #include ничего никуда не погружает. Ну, если "погружает" это не "подгружает" с опечаткой, то таки да. А что ты называешь "погружать"? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 18:20 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
MasterZivДля этого достаточно разбить на разные исходные модули (файлы *.cpp или *.c) ГРУБО ГОВОРЯ: Берёшь один исходник, копируешь с другим именем, открываеш в редакторе и выкидываешь всё, что НЕ хочешь видеть в данном исходнике. Потом выкидываешь всё, что осталось, из исходного исходника. Так ошибки-то этой выкинутой процедуры не позволят компилировать проект. К тому же при вызове функций других cpp- файлов приходится добавлять их h-файлы, что приводит о повторном использовании одного и того же символа(LNK2005). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 18:54 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
MasterZivGermanV+ А чтобы ошибки одной dll НИКАК не мешали работать с другой dll мне поможет позднее связывание dll? Нет. Не поможет. Оно тут вообще ни при чём. GermanV Или синтаксический контроль делается в любом случае на этапе построения? Синтаксический контроль делается на этапе компиляции. Это что идёт перед сборкой. Я про то, что есть раннее связывание- dll загружается в память на этапе запуска приложения и позднее связывание- функции dll загружаются в память в момент их вызова. Зачем же при позднем связывании делать какие-то контроли всего и вся? К тому же dll вроде как должна быть уже откомпилирована, зачем ее предварительно контролировать синтаксически? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 19:00 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
MasterZivGermanVКак эту функцию погрузить в свое пространство имен, и как ее видеть из общего файла? Это не понятный пост. Она уже там, в пространстве имён, общем. Я хочу в отдельном файле cpp создать свое пространство имен, в котором определить функцию. И потом эту функцию из моего пространства имен использовать в диалоге формы, как обработчик нажатия клавиши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 19:02 |
|
||
|
Подскажите с выбором структуры программы (разбивка по решениям/проектам/библиотекам)
|
|||
|---|---|---|---|
|
#18+
GermanVMasterZivДля этого достаточно разбить на разные исходные модули (файлы *.cpp или *.c) ГРУБО ГОВОРЯ: Берёшь один исходник, копируешь с другим именем, открываеш в редакторе и выкидываешь всё, что НЕ хочешь видеть в данном исходнике. Потом выкидываешь всё, что осталось, из исходного исходника. Так ошибки-то этой выкинутой процедуры не позволят компилировать проект. К тому же при вызове функций других cpp- файлов приходится добавлять их h-файлы, что приводит о повторном использовании одного и того же символа(LNK2005). Это тебе тогда в школу надо... Я тебе сейчас не смогу быстро это все объяснить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 19:31 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38085688&tid=2020568]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
183ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 312ms |

| 0 / 0 |
