За время написания всяких десктопных приложений я попробовал разных фреймворков: VCL, MFC, немного Qt....
Однако сейчас мне предстоит написать свой собственный О_О
Я немного погуглил, и нашёл книжечку: Build a frontend web framework.
Однако, книжечка эта скорее про web, чем про десктоп.
В общем, посоветуйте, что почитать именно про десктоп фреймворки?
Изобретать велосипед категорически не хочется!
Очень странная затея. Зачем вам писать свой собственный фереймворк? Особенно декстопный? Какая перед вами задача стоит?
Вам хочется написать GUI приложение без всяких сторонних фреймворков? Допустим, потому что они тяжелые? В этом случае вам не стоит упарываться в создание фреймворка и просто написать свое GUI приложение используя напрямую функции операционной системы - winAPI (GDI или DirectX) или wayland/x, в зависимости от того, под что вы пишите. Да, под каждую платфорому вам придется писать практически весь GUI отдельно.
Даже если вы планируете писать несколько приложений, у вас разработка фреймворка не окупится никак, быстрее и легче будет написать каждое с нуля, возможно копируя какие-то куски кода.
Wataru, К Ардуине прилагаются отличные экранчики, а-ля 480x320 и true color. Они прям в Arduino Uno втыкаются. Или в Mega. Хочу сделать красиво: придумать framework, который будет позволять нарисовать кнопки, текст, скроллы, ну тач обработать. И чтобы это нарисовать один раз и больше не трогать!
и не думать о том, как там внутри это устроено.
Не, я могу и "в лоб" написать.
Но, опять таки: я не хочу изобретать велосипед. Я уверен, что кто-то где-то что-то уже написал о том, как такие штуки проектируются. Просто не могу почему-то ничего найти :(
Вова, Я бы не замахивался на фреймворк сразу. Начните с малого. Напишите просто программу, которая рисует текст в произвольном месте, рисует прямоугольник. Потом вместе - получается кнопочка. Собирайте библиотеку подобных функций рисования.
Потом начинайте думать о композиции элементов вместе. Тут направшивается ООП подход. Просто скопируйте с других фреймворков, они тут примерно все одинаковые. Не знаю книг про дизайн такого, но просто посмотрите интерфейс в других библиотеках, в том же winapi. Компоненты имеют координаты и образуют иерархию, более нижние рисуются после верхних, поверх них.
Для обработки нажатий алгоритм простой - компонент сначала запускает проверку в детях, потом проверяет сам, было ли событие по его области ответственности, и если да - то вызывает callback. Самый верхний - корневой компонент должен принимать события о клике от системы. Не знаю, как тач в адруинке работает, возможно у вас как в игре будет цикл обработки событий, где вы опрашиваете устройства на предмет нажатий и передаете это в корневой объект GUI.
Фреймворк - это - работа в рамках. Тоесть ты должен навязать разработчику
какую-то рамочную модель разработки. Это не всегда возможно. Разраб этого
обычно не любит. Поэтому за созданием фреймворка обычно стоит более глубокая
идея чем просто Фреймкорк Васи Пупкина.
Например - многие фреймворки давят на шаблон Inversion of Control.
Обычно это доверие главного control flow фреймворку. А программист
уже вставляет свою логику в какие-то ключевые точки. Яркий пример
- сервлеты. Фреймвор обеспечивает веб, балансировку, роутинг путей
и поддержку сессий. А программист просто делает сервлет который обрабатывает
request.
Я тебе советую пойти к преподавателю и выстрясти идею из него. Потому что
ты вряд-ли сможешь нечто подобное и ценное придумать .
Я тебе советую пойти к преподавателю и выстрясти идею из него.
Я бы с радостью, да у меня нет преподавателя. И вообще мне 40+ и я в уже некоторое время варюсь в программировании. Просто раньше я ковырял C++, asm, SSE, x86, а теперь мне надо переквалифицироваться в управдомы во фреймворко-писателя, причём я даже не уверен, что в десктопного [facepalm]
Вова, звучит как бред, какой смысл поручать исполнителю задачу, в которой у него нет компетенции. Я вообще не понимаю, с чего вдруг подобное родили, что можно просто так взять и начать решать такие задачи.
Прости, а у кого есть компетенция для этой задачи?
Гуёвых фреймворков на рынке - не то, чтобы три штуки, но исчезающе мало.
И пишут их отдельные программисты (хотя больше похоже, что целые отделы).
Кто-то ведь их должен писать?
mayton2019, В какой-то степени. Периодически приходится что-то вытаскивать в отдельно взятые библиотеки. То свои классы-обёртки над WinAPI, то в детстве мастерил GUI под "DOS" на чистых плюсах (прям целиком... кнопки, окна, диалоги).
Но по большей части всё-таки усиленно расширял существующие фреймворки (компоненты для VCL делал, допиливал GUIёвую часть хромиума).
Вова, очень сложно в наше время придумать фреймворк для Windows GUI на С++
Microsoft в этом смысле просто упростил себе задачу сразу взяв язык C#/.Net.
И очень сложно будет писать нечто параллельно с Qt.
Я себе вижу идею только в том чтоб сделать это лучше чем в Qt. А для этого нужно
например собрать список всех недостатков. И исправить их в новом фреймворке.
Формулируете вашу задачу в виде какого-то текстового/графического описания
Формулируете ТЗ с конкретными требованиями, ограничениями и всем прочим
На основе ТЗ разрабатываете ЧТЗ (Частное ТЗ) со всеми полными деталями, описаниями всех действий, событий, взаимодействий и прочее
Используя ЧТЗ подготавливаете проект - архитектура, инструменты, системы, подсистемы и прочее с полным описанием, декомпозированными элементами вниз до самых простых и прочее
Берёте проект и по шагам его реализовываете
Profit
Это примерно - у каждого проекта свой путь. Есть ещё аналитика, исследования, тесты, планирование и куча других организационных и подготовительных действий. В разработке фреймворка принципиальных отличий от разработки любого другого ПО нет.
Вова, ну а вы как хотели? Чем больше и сложнее приложение - тем меньше процесса написания кода в нём. Доля кода в 20-25% от общих трудозатрат в средних и больших проектах вполне обычное явление. И может даже ниже опускаться.
оффтоп, пример
Вполне реальная ситуация: из-за неверного решения в процессе планирования разработки и отсутствия строгого плана разработки и проекта решения, от проекта отрезали часть функционала в отдельное независимое решение, так ещё и передали стороннему подрядчику (с целью попытки ускорения разработки - хаха, наивные; так ещё и не было строго контроля над процессом разработки этого компонента - и конечно же, подрядчик сэкономил тут на своих затратах вообще максимально) - как результат вместо простой реализации данного функционала на базе готового фреймворка было произведено примерно 30-35% дополнительной работы на организацию одного только взаимодействия с внешним компонентом. Со стороны этого компонента аналогично. Думаю, озвучивать последствия данного решения нет никакого смысла даже.
Что такое фреймворк? По сути своей это библиотека, которая предоставляет какие-то инструменты для упрощения разработки приложений и решает какую-то проблему. Так-то любое ПО - это решение какой-то проблемы.
VoidVolker, И к процессу разработки любого ПО обычно прилагается учебник. Хотя бы по паттернам! Но мне надо не просто спроектировать приложение, а целый гуёвый фреймворк! Вот я и думаю, может есть какая-нибудь книжка, а-ля "Паттерны написания графических фреймворков" :))
Вова, графический фреймворк для создания GUI? Как я уже говорил - ничего такого особого там нет. Например стандартный MVP вполне подойдёт для вашего случая. Выбираете графический движок или пишете сами, продумываете базовую логику работы с элементами интерфейса и бизнес-логикой, реализуете.
Вова, нуу, как говорится "слона надо есть по кусочкам". Сделайте декомпозицию вашей задачи на боле маленькие, выделите известное вам в одну категорию, неизвестное - в другую и ищите решения неизвестного. Какую именно задачу должен решать ваш фреймворк? Какой функционал там должен быть? На каких ОС он должен работать? Вы говорите, что ваш работодатель поставил вам задачу "разработать фрейморк" - так спросите его о деталях. Или все детали у вас уже есть? Какие они?
Вова, можете особо не напрягаться - всё равно вылезет что-то новое/неизвестное в процессе реализации. Или вообще передумают. В общем случае полноценный графический фреймворк - это та ещё морока и немалый объём функционала. На всё это нужен чемодан денег. При отсутствии такого чемодан в одиночку такой объём можно пилить годами и десятилетиями. Ну или сделать что-то очень простое с минимальным функционалом. Максимум, что имеет смысл делать - поглядеть под капот каких-нибудь иксов или GTK+, почитать как оно внутри работает и как используется. В масштабных задачах готовых рецептов нет.
Вова, всегда пожалуйста! Обращайтесь, если что ) Я ещё в студентечестве писал с нуля простейший оконный движок и всю графику по пикселям, да даже простой 3Д движок на голом OpenGL достаточно легко пишется. Так что там на самом деле ничего сверхсложного нет. Кстати, настоятельно рекомендую обратить внимание на интерфейс Blender3D: у него свой собственный GUI движок, который представляет из себя довольно уникальное решение. Цель этого движка - иметь очень гибкий и интуитивно понятный интерфейс. Именно благодаря этому движку порог входа в блендере ниже, чем у других аналогичных пакетов 3D моделирования и, которые стоят огромных денег, в отличии от открытого и бесплатного блендера. И при этом он умудряется держатся на их уровне - а это не так-то просто. И лично я считаю, что успех блендера - большей частью заслуга именно этого движка. Если бы разработчики выбрали классический интерфейс на базе системного API, то с очень большой долей вероятности блендер бы не получил бы такой популярности, а значит и развития - и таким образом история блендера очень быстро закончилась бы.