Всем привет.
Ради интереса, предлагаю на досуге ознакомиться с моим творением - программой для написания киносценариев. Программа представляет из себя продвинутый текстовый редактор. Может быть кому-то будет интересно.
А мне было бы интересно ваше мнение - как код? Не претендую на полномасштабный ревью, но может всё-таки взглянете хотя бы на способ взаимодействия слоя бизнес логики со слоем хранения данных? или может быть вас заинтересует постраничный редактор а-ля ворд на основе QTextEdit'а?
Вобщем, кому не лень, или наоборот нечего делать - милости просим! Вот ссылка на гитхаб - https://github.com/dimkanovikov/Scenarist, там в ридми есть ссылка на сайт самого проекта, если вдруг понадобится более подробная информация о нём. Или пишите прямо сюда, я с удовольствием готов обсудить любые вопросы!
А чем принципиально отличается от Scrivener или FinalDraft?
Flex Ferrum, здравствуйте. Принципиально тем, что опенсорс.
Как бы тему-то развеселить? Может быть вам было бы интересно узнать какие-то технические моменты?
думаю, что такие вещи лучше рекламировать на профильных сайтах. там, где сценаристы тусуются, например. а программисту такой софт вряд ли пригодится. у нас тут в основном вопросы программирования обсуждают и темы смежного софта, который нужен в программировании и отладке.
Iron Bug, спасибо за совет, но я и не хотел её рекламировать Дело в том, что в программе ведь есть и техническая сторона - код. Вот мне и хотелось бы себя показать, может быть те решения, которые применены в этом проекте будут кому-то полезны, или может быть кто-нибудь даст дельный совет, как что-то можно улучшить. А со сценаристами мы уже давно и плотно работаем.
В общем решено, попробую писать небольшие обзорные статьи по внутреннему устройству программы.
Всем привет.
Сегодня хочу рассказать об архитектуре проекта в общих чертах.
Итак, вся система разбита на шесть слоёв:
Вверху на картинке показаны два общедоступных слоя (т.е. знать о них разрешено любой функции/классу из любого другого слоя):
1. Модель предметной области
Фактически представляет собой отображение схемы базы данных в объекты.
2. Вспомогательные элементы
Здесь находятся все универсальные решения, а так же все сторонние решения, обнаруженные в интернете. В основном это виджеты и делегаты, но так же есть несколько вспомогательных классов, которые используются повсеместно в проекте.
Далее идут слои, являющиеся пожалуй, основными составляющими программы. Слева идут три слоя, которые замыкаются на себе, т.е. им разрешено знать о сущностях находящихся в собственном слое, а так же о сущностях общедоступных слоёв. Управленческий же слой берёт на себя обязанность по координации взаимодействия между всеми слоями приложения. Это моя своеобразная интерпретация паттерна модель-представление-контроллер. Т.к. слои независимы, они легко разносятся, что облегчает создание новых систем на основе имеющейся.
Дальше чуть более подробно о каждом из них:
3. Слой хранения и обработки данных
Скрывает в себе три подслоя, которые в свою очередь предоставляют: а) интерфейс доступа к базе данных; б) загрузку данных из базы и преобразование их в модель предметной области; в) собственно доступ к загруженным объектам.
4. Слой бизнес логики
Сосредотачивает в себе все тонкости работы с киносценарием: подсчёт хронометража, построение структуры сценария, импорт/экспорт сценария из/в документы различных форматов и т.д.
5. Слой пользовательского интерфейса
Мне нравится, когда интерфейс тупой, просто отправляет сигналы в нужный момент и загружает предоставляемые ему данные в заданные поля. Но в данном проекте есть одно большое исключение - это собственно сам редактор сценария (ScenarioTextEdit). Он вместе с группой зависимых классов является, как представителем слоя пользовательского интерфейса, так и входит в управленческий слой. Сделано это потому, что сам редактор довольно специфичный и разделение его на два независимых класса принесло бы больше проблем/сложностей/трудозатрат, чем их объединение.
6. Управленческий слой
Как и говорилось раньше, этот слой берёт на себя ответственность за координацию взаимодействия между всеми слоями приложения, от первого пункта меню, до вопроса о сохранении редактируемого проекта при закрытии программы.
Вот так выглядит самый верхний срез устройства программы.
Постепенно я буду выкладывать всё более детальные подробности, если вас что-то заинтересовало, вы хотите что-нибудь покритиковать, или уточнить - УРА! Пишите, мне очень интересно ваше мнение.
Приветствую, коллеги.
Продолжим наше знакомство и сегодня поговорим о слое Модель предметной области.
Модель предметной области предназначена для сокрытия базы данных от верхних слоёв приложения, т.е. в приложении мы работаем с объектами (сценарием, персонажами, локациями и т.п.), а не с записями из базы.
Что внутри? Устройство слоя.
Давайте рассмотрим, как устроена логика работы слоя.
DomainObject - базовый класс для всех объектов модели предметной области. Т.к. объекты являются отражениями данных из базы, то они содержат поле идентификации (Identifier - обёртка над идентификатором записи из базы данных), методы для работы с ним, а так же вспомогательный функционал для отслеживания изменений объекта.
DomainObjectsItemModel - базовый класс для списков объектов. Наследуется от родной модели Qt, реализуя основной функционал и немного расширяет её. Это позволяет использовать преимущества, как самой модели предметной области, так и техники Qt Model/View Programming.
ConcreteObject и ConcreteObjectsItemModel здесь - это реальные представители модели предметной области.
Что внутри? Классы.
А вот и диаграмма со всеми представителями слоя.
Каждый из девяти объектов хранит всю необходимую информацию о себе, а так же имеет вспомогательные функции для работы со своими данными.
Вот примерно так и организована модель предметной области в моём приложении.
Как обычно, если у вас нашлись вопросы или замечания, буду очень рад обсудить их!
Привет, коллеги! Решил освежить ветку - вдруг кому будет интересна дальнейшая судьба проекта!:)
Количество установок программы уже давно перевалило за 20 тысяч! В прошлом году ко мне присоединился ещё один разработчик - студент МГУ, который в своё свободное время тоже участвует в разработке. За прошедший год мы основательно улучшили облачный сервис, значительно развили модули разработки, редактора сценария и статистики, сделали кучу небольших, но полезных улучшений, всякие автоматические обновления и т.п. вещи, добавили модуль карточек, а потом полностью его переделали!:D Программа была переведена ещё на 4 языка (немецкий, казахский, португальский и украинский), в работе переводы на китайский, японский и фарси.
Вот, даже сделали небольшое видео об основных возможностях: https://www.youtube.com/watch?v=zg-BLExGWzE
Короче жизнь кипит!:)
Если вам будет интересно узнать что-нибудь о проекте в подробностях, то с удовольствием расскажу! Ну а если вы вдруг захотите стать соучастником, то добро пожаловать! А если решите скачать и попробовать - не удивляйтесь, в программе серьёзно доработан интерфейс в сравнении с версией на видео!
Весёлого дня, ребята!
Ребята, всем привет!
А мы всё также развиваем наш Open Source проект. Некоторые говорят, что он уже стал на российском рынке стандартом, другие с этим не согласны, но мы тем не менее не отступаем и сейчас активно будем выходить на европейский рынок.
В связи с чем, вновь объявляется поиск разработчиков для участия в проекте! Мне интересны ребята, которые умеют решать задачи. Если у вас нет большого опыта, то это ничего, я помогу во всём разобраться + постоянно делаю ревью, подсказываю в каких-то моментах. Главное, чтобы вам самим было интересно в этом поучаствовать и вы умели добиться результата. Ну а если есть большой опыт и вы хотите стать частью нашего проекта - круто! Есть очень много разноплановых задач. Куча задач по доработке самого приложения: тут и вещи связанные с GUI (чисто интерфейсные задачи, типа сделать фильтрацию в дереве, разработки графических редакторов [редактор схем, таймлайн], и другие [сейчас например есть желаение сделать диф-тулзу для сравнения версий сценариев]) и оптимизации/переработки некоторых алгоритмов, парсеры, есть задачки связанные с сетевым взаимодействием приложения и облачным сервисом; на бэкэнде нашего облачного сервиса тоже есть куда идей для развития. В общем не заскучаешь!
Технологии, которые сейчас используем: desktop & mobile - Qt (GUI на QtWidgets), web - php (если вы захотите переписать сервис на go или node js - да пожалуйста, тут полная свобода).
На всякий случай продублирую ссылку на исходники https://github.com/dimkanovikov/KITScenarist
P.S. Студент, который вместе со мной развивает проект, устроился на стажировку в компанию мечты! Не то, чтобы я в этом виноват, но как приятно быть причастным!:)
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)