Как сделать настольное приложение модульным? - PullRequest
7 голосов
/ 06 мая 2009

Как сделать настольное Java-приложение модульным? Как следует классифицировать модули?

Ответы [ 7 ]

5 голосов
/ 06 мая 2009

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

Этого можно добиться, заранее спланировав свой дизайн, скорректировав его и постоянно обновляя код во время реализации.

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

5 голосов
/ 06 мая 2009

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

Для настольных приложений я настоятельно рекомендую посмотреть DA-Launcher с www.dynamicjava.org . Это делает развертывание вашего приложения SOOO намного проще. У них также есть несколько вещей, таких как динамический JPA, которые полезны для любого приложения OSGi.

4 голосов
/ 06 мая 2009

Вы имеете в виду модульный, как Eclipse?

Если вы создадите настольное приложение Java на Eclipse RCP или NetBeans RCP, вы получите модульность "бесплатно" (почти; -))

3 голосов
/ 08 мая 2009

Ответ на Ваш вопрос действительно зависит от того, что вы имели в виду под "модульным" .

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

Прежде всего вы должны рассмотреть, является ли «модульность», которую вы ищете, модульность архитектуры , модульность времени развертывания или модульность времени выполнения .

В любом случае каждый последующий уровень подразумевает все предыдущие уровни.

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

Начните с малого, но имейте в виду большую картину. При проектировании немного более крупных блоков (или модулей) вашей системы убедитесь, что они имеют как можно меньше перекрывающихся областей. Каждый модуль не должен делать никаких предположений об окружающей среде, в которой он работает, и обслуживает только одну проблему. Любые сервисы, которые ему требуются от своих коллег, должны быть явно предоставлены внешней инициализацией (предпочтительно используя внедрение зависимостей для склейки модулей вместе в работающее приложение).

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

Для обеспечения модульности времени развертывания очень важны Внедрение зависимостей фреймворки типа Guice , Spring framefork и другие.

Модульность времени выполнения с моей точки зрения это похоже на модульность, предоставляемую плагинами Eclipse и NetBeans или расширениями Mozilla, где вы можете изменить конфигурацию и набор модулей приложения после развертывания / установки.

Это подразумевает некую архитектуру и инфраструктуру, которая распознает новые плагины / расширения либо во время инициализации приложения, либо динамически во время выполнения.

Последнее также означает, что все ваши модули должны быть собраны с неявным предположением, что любая служба, которую использует модуль, может легко исчезнуть в любой момент времени, прилагая дополнительные усилия для обеспечения устойчивости кода, работающего в этом изменчивом мире.

1 голос
/ 06 мая 2009

Вы также можете взглянуть на Java Plug-in Framework,

http://jpf.sourceforge.net/

JPF может значительно улучшить модульность и расширяемость ваших систем Java и минимизировать поддержку и обслуживание расходы.

1 голос
/ 06 мая 2009

Я бы также порекомендовал Eclipse RCP или взглянул на Netbeans RCP. Два очень похожи. Их разделяет то, что Eclipse RCP использует собственные библиотеки GUI вместо Swing, которые использует Netbeans.

Плюсы и минусы в том, что Elcipse может быть немного быстрее, хотя вы более ограничены тем видом управления, который предлагает операционная система. Netbeans использует Swing, который может быть более знаком большинству разработчиков Java, а возможности разработки пользовательских элементов управления бесконечны.

Прошло много времени с тех пор, как я работал с Eclipse RCP, поэтому я, вероятно, ошибаюсь в разработке пользовательских элементов управления в Eclipse RCP.

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

Удачи!

0 голосов
/ 06 мая 2009

попробуйте с Пружинный РКП

http://www.springsource.org/spring-rcp

при организации вашей части графического интерфейса приложения ...

...