Комментарии 54
Как решаются возможные конфликты (два модуля претендуют на модификацию одной части интерфейса)?
Может ли один плохой модуль сломать все приложение?
2. Да, если в систему встроить заведомо нерабочий модуль, то всё грохнется. Однако, прежде чем такой модуль будет подключен к программе, он должен пройти несколько этапов контроля, начиная от сборки под разные платформы и заканчивая интеграционным тестированием.
Вообще говоря, будет некий централизованный список «доверенных» модулей, которые уже прошли все стадии контроля, и которые пользователь сможет подключить в приложение, скачав их с сервера через это же приложение или с сайта.
Зависимости и конфликты контролируются корневым модулем, который загружает и линкует все прочие модули.
А как корневой модуль узнает, что модуль A зависит от модуля B?
Вот, например, мета-файл модуля с логикой для списка задач:
{
"Type": "PluginModel",
"Interface": "ITaskTreeModel",
"Name": "TaskListModel",
"RelatedPluginInterfaces": [
"IExtendableDataManager",
"IMainMenuModel"
]
}
Спасибо, видно, что вы серьезно подошли к задаче.
- Как корневой модуль обрабатывает наличие нескольких реализаций одного интерфейса?
- Может ли модуль стать корневым для своих подмодулей и использовать тот же механизм для разрешения зависимостей?
- Можно ли получить актуальный граф модулей в пригодном для понимания человеком виде?
А в неё модули добавляют только разработчики компании или любые?
2. Вообще говоря, я хотел раскрыть эту тему в следующей статье, но вкратце есть всего 4 типа модулей:
- Model — бизнес логика и взаимодействие с другими модулями
- View — пользовательский интерфейс
- DataManager — предоставляет доступ к независимым от источника данным и общается с DataSource в контексте источника данных (запросы, протоколы и прочее). Это такой, буферный тип для отделения логики от источника
- DataSource — взаимодействует напрямую с источником данных
За исключением описанных ролей — я не закладывал абсолютно никаких ограничений на функциональность, только на назначение. Так что да, можно хитровывернуться как вы предложили)
3. Можно, но сейчас это не реализовано. Однако, можно реализовать всё что угодно — нужно лишь знать интерфейс нужного модуля. Вот, например, интерфейс того самого корневого модуля:
class IMainMenuModel : public IModelPlugin
{
public:
struct MenuItem{
MetaInfo* meta;
QList<MetaInfo *> Items;
QList<MenuItem*> SubItems;
};
virtual MenuItem* GetRootMenuItem() = 0;
virtual void RunItem(MenuItem* item, MetaInfo *viewMeta) = 0;
};
В принципе, можно хоть сейчас строить такой граф.
У меня ощущение, что вы только что придумали мобильную операционную систему. Приложения — и есть те самые модули.
В моём же случае я использую фреймворк Qt для обеспечения переносимости логики и интерфейса на любую платформу. Что-то вроде кроссплатформенной операционной системы получается, простите мой французский.
QML ещё делают, но в целом он уже очень привлекательный. Призывают бросать в топку виджеты и переходить на QML. Я пока не отказываюсь от виджетов, так как с ними удобнее работать из плюсов, но если что-то красивое надо сделать, то объединяю виджеты с QML.
А вы какие инструменты используете и как обеспечиваете модульность архитектуры?
И по облаку смотрю упорно в сторону Django/Flask
Вот тут народ пишет:
не плохо было бы привязывать начало одних задач к завершению других задач
А ещё хочется чтобы при отмене одной задачи отменялись её потомки и создавались другие. Хочется чтобы задачи создавались сами на основе внешних событий, звонков, писем, превышения скорости в мониторинге автомобиля… Вообще хочется чтобы всё само происходило по разным сценариям.
Так вот всё это возможно в планфиксе. И если чего-то не возможно, то можно попросить добавить это и разработчики делают. Единственное чего у них пока нет, это удобного мобильного приложения, обещают уже год.
Спасибо, я не знал о таком инструменте. Обязательно ознакомлюсь.
А как у них реализовывается создание задачи при превышении скорости автомобиля?
Не изобретайте велосипед, прикрутите лучше свой мобильный интерфейс к их API, я буду первым тестером и возможно покупателем.
А как у них реализовывается создание задачи при превышении скорости автомобиля?
Система мониторинга умеет слать email, а планфикс умеет при поступлении письма разбирать его и при выполнерии условий создавать задачи по шаблонам. Потом планфикс вызывает через API телефонии диспетчера и водителя, водитель получает втык, запись разговора прикрепляется в задачу, задача завершается. Если же нет, то диспетчер оповещается планфиксом уже через телеграмм ботом, а если и так нет реакции, то через час создаётся задача старшему диспетчеру и он начинает нагибать первых двух исполнителей.
Очень мощный инструмент автоматизации бизнес-процессов. И при этом там легко вести личные дела, использовать его как ежедневник и ещё куча других вариантов использования, судя по тому что пишут люди в успешных кейсах.
Нет, я имел ввиду как они определяют что скорость превышена — в машине установлена какая-то аппаратура или они с GPS телефона информацию берут?
Они специально для нас добавили функционал геозон, в которых можно указывать максимальную скорость.
Кстати по поводу определения текущей скорости ещё не всё решено. Есть подводные камни.
Единственное чего у них пока нет, это удобного мобильного приложения, обещают уже год.Это перечёркивает все их достоинства. А ещё, как я понял, у них нет автономной работы. Я частенько бываю в местах, где даже голосовая связь отваливается, не то, что Интернет. Внезапно остаться без всех своих задач и планов — перспектива не из приятных.
В мобильном приложении обещают и автономную работу и именно это, я так понимаю и затягивает процесс. Потому как не совсем понятно, как обрабатывать автономность в случае групповой работы над задачами. В сингл режиме то проблем особых нет, хотя вдруг у вас есть и телефон и комп и ещё несколько устройств, и как это всё синхронизировать и решать конфликты при появлении связи?
А в мультиплеере вообще сложно, вы что-то по задаче сделали в автономном, а её уже закрыли или изменили и ваши действия уже не повлияют на сценарии так, как вы хотели. Да и даже если ничего не изменили, это же надо и серверные сценарии тянуть на клиент, чтобы они там выполнялись.
Надеюсь им удастся сделать что-то более интересное, чем простую автономную записную книжку
Хорошей всем пятницы, а я в отпуск, рыбу ловить.
Пока ещё нет автономной работы и это ещё возможно.
Да, я, к сожалению, тоже столкнулся с такой же проблемой. Вы не встречали существующих приложений, которые общаются через сокеты или интенты? Любопытно, насколько вообще такой подход распространён.
Спасибо за статью. Примерно такую же задачу сейчас решаю тольк с crm/erp
Я бы сказал что это и методология и система, все взаимосвязано. Фактически все началось с того что ни одна не подошла, где то что то не хватало, где то было слишком много. А менять нельзя. Поэтому решили сделать модульную систему и выложить все на Github, может кому будет интересно присоединиться :). Пока делаем только веб приложение, поэтому — Vue.js -и LoopBack.
То есть наверное можно поддерживать небольшой зоопарк, небольшой зоопарк это не сложно. Но тогда у пользователя не будет всех фишек которые он бы хотел. А если делать все фишки которые бы он хотел, то тогда будет сложно гарантировать что всё будет работать достаточно гладко во всех комбинациях.
Автор, кстати, не пробовал org-mode? По-моему их идеалогия очень схожа. Правда поддержка мобильника всё ещё оставляет желать лучшего. Хотя вот активно пилится orgzly например, у них море планов.
По поводу гладкости работы — запланировано обеспечить несколько этапов контроля новых модулей: сборка под разные платформы, автоматическое тестирование (функциональное, интеграционное), код-ревью другими разработчиками, выпуск модуля в бета-группу, а только после этого уже разрешение доступа к модулю всем пользователям. Тут много идей, но работы предстоит ещё больше.
Спасибо за информацию — не был знаком с ними. А какие у orgzly планы, ну из самых интересных?
А интеграционных модулей можно придумать бесконечное количество. Экспорт-импорт данных, синхронизация, всякие гаджеты, оформление UI. Это все полезно, но не то, что создает продукт.
Я не говорю что этот продукт является панацеей от всех бед разработки — он с таким же успехом добавляет новых, но вот проблему, которую я озвучил, он должен решить однозначно.
Мне кажется, это получается адский мульти-тул для сложных задач вместо отвёртки или хотя бы швейцарского ножа.
Идеальный инструмент — тот, которым легко и приятно пользоваться, а не тот, который покрывает 110% запросов пользователей.
А это решается не модульностью, а хорошим дизайном и usability, от удобных шорткатов на компе до хорошего мобильного приложения. А то рождаются всякие убогие Trello, где интерфейсных ошибок больше, чем фич, зато его можно расширять модулями power ups!
Или посмотрите для примера на сегмент текстовых редакторов или редакторов кода. Монстры редко выживают, а уж модульность вообще мало кому нужна, хотя тоже можно было бы собирать идеальный редактор по кусочкам.
И, да, проще держать notepad, sublime text, word и phpstorm в придачу, потому что для разных целей удобно держать разные отвёртки.
Я бы прямо сейчас бросил всё и начал радоваться жизни, если бы
которым легко и приятно пользоватьсязначило для всех пользователей одно и то же. Рынок, к сожалению, переполнен продуктами, которые различаются лишь
хорошим дизайном и usability, а функционально являются идентичными на 70-95%. Да, варьируются масштабы проектов, но по сути, здесь уже вступает в дело маркетинговая политика, а не способности программистов.
Однако, ознакомившись с документацией, хочу отметить следующие моменты:
В разделе Philosophy:
Taskwarrior carefully limits the features it supports, in order to focus on doing one thing well. It does not offer reminders and time tracking, because there are other projects dedicated to implementing those features well.Получается, что они заведомо ограничивают возможности расширения системы. Это не плохо — вполне вероятно, что у них прекрасно получается, но я в этой статье говорил о системе, в которой нет ограничений функциональности.
If a feature improves the way we manage task lists, then it belongs in Taskwarrior, otherwise it belongs in some other software.
В разделе Extension API:
Several Timewarrior reports are written as extensions, which uses an API to provide filtered data and configuration to the external command. This is a one-way process, the extension has no way to communicate back to Timewarrior. Future rules will allow this.Здесь же вообще говорится, что расширения не могут влиять на работу основного приложения. Да, они говорят что в дальнейшем ситуация изменится, так что если это действительно будет так, то этот пункт критики можно не учитывать.
Как вы упомянули:
По сути вы делаете аналог, но только для телефона.Однако, я делаю эту систему переносимой на все платформы — то есть весь спектр реализованных функции будет в том же виде доступен на любом устройстве.
Абсолютно согласен с вами, что одно приложение ставить намного проще чем этакую махину, но я и не утверждаю что оно поглотит весь рынок, мимикрируя под все существующие приложения. Может мимикрировать то оно и сможет, но чтобы заставить его это сделать будет нужно будет, само собой, приложить некоторые усилия — что является минусом относительно «готовых» приложений. Однако это не приговор — здесь уже встают задачи по сведению этих усилий к минимуму и сокрытии от пользователя (по крайней мере в начале) всех доступных возможностей — чтобы не пугать его раньше времени.
И кстати, вы говорите об агрегации приложений — однако, в этой системе функции будут представляться отдельными библиотеками подключенными в одно приложение. То есть здесь агрегация идёт на уровне интерфейсов модулей. Чтобы это получше описать, воспользуюсь вашим примером:
Я вот поставил его, и хочу чтобы приложение задач было связано с приложением миндмап, т.е. чтобы я мог видеть задачи наглядно.В архитектуре системы, список задач будет представлен модулем в котором хранятся только данные, а к нему уже будет подключаться модуль, который занимается только отображением — это что-то вроде подхода MVC. То есть один и тот же список задач можно, при подключении соответствующего модуля, отобразить как угодно.
Существует ли идеальный планировщик личных задач? Разработка модульного планировщика