Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Удачи!

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

http://jpf.sourceforge.net/

  

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

попробуй с Весенний РКП

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top