2013-04-20 2 views
1

Ситуация следующая:функциональность проекта в независимых модулей, архитектурное решение

Мы (студенты) должны написать программный проект кросс-платформенный для нашего университета, предназначенный для обработки статистических данных, вероятно, астрономические. Ожидается, что студенты (с разными навыками) смогут продолжать поддерживать/улучшать проект из года в год.

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

Итак, у нас есть небольшая группа относительно опытных студентов, которые могут выполнять основную работу. Решение состояло в том, чтобы выбрать C++ в качестве основного языка программирования и Qt для кросс-платформенного графического интерфейса.

Основная проблема заключается в тех, кто будет разрабатывать модули в будущем. Образование здесь в значительной степени основано на Паскале/Дельфи (это Украина, все говорят :)), курс C++ плох, и подавляющее большинство студентов слишком ленивы, чтобы сами что-то выучить, поэтому давайте предположим, что Паскаль - это единственное, что они знать.

вот главный вопрос:

Что такое адекватный способ создания модульной системы со следующими требованиями:

  • Проект должен быть кросс-платформенный
  • Основные функциональные возможности для обработка данных должна быть реализована как набор (относительно) независимых модулей
  • Модули должны быть написаны на разных языках (требуется Pascal)
  • Модули должны иметь возможность запрашивать дополнительные данные, создавая окно или каким-то образом запускать механизм генерации окна в основной форме и получать новые данные или каким-то другим способом?
  • COM технологии не могут быть использованы
  • Среднее умение студентов, которые будут писать новые модули в будущем, по-видимому низкой

Любые идеи будут appeciated.

ответ

1

Я бы начал с разработки контрактов для поставщиков данных и потребителей данных. Из-за технических ограничений контракты должны быть выражены как функции и реализованы как родные библиотеки.

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

Наличие поставщиков данных и потребителей данных позволяет создавать новые функции практически навсегда. Новые поставщики данных могут использовать файлы, веб-службы, что-либо для создания данных. Новые потребители могут анализировать данные, экспортировать, создавать графики или все, что вы хотите.

Что касается меня, это требование Delphi вместе с требованием кросс-платформенной разработки. Мой совет - забыть Delphi и переключиться на Java.Это кросс-платформа, есть отличные бесплатные инструменты для разработчиков, и через 2, 5 или 10 лет ее, скорее всего, узнают участники проекта.

0

На основании ответа Wiktor Zychla я бы посоветовал использовать OSGI, если вы решите использовать Java и архитектуру на основе компонентов (я не могу дать свое мнение о выборе, потому что я не очень объективен, поскольку использую только java). С OSGI, определение контрактов для поставщиков данных и потребителей данных прекрасно управляется, система будет автоматически подключать модули в соответствии с контрактом, который они определяют. Отсканированные папка для развертывания уже здесь, он поддерживает горячую разворачивать, множественный вариант того же компонента работает вместе, и т.д ...

http://en.wikipedia.org/wiki/OSGi

В соответствии с функциональными требованиями, используя язык, обеспечивающий богатые библиотеки для сложных математических операций является также рекомендуется, но я не знаю возможности pascal.

Смежные вопросы