Как разделить большой проект Java на меньшие компоненты

Возможно, вы захотите взглянуть на пакет angular-input-masks . По-видимому, для реализации требуемой логики используется директива ui-us-phone-number-mask:

var app = angular.module('myApp', ['ui.utils.masks']);
app.controller('myCtrl', function() {});




8
задан Charles 9 December 2013 в 05:11
поделиться

6 ответов

Взгляните Структура 101. Потрясающе для визуализации зависимостей и проявления зависимостей повредиться на Вашем пути к более чистой структуре.

8
ответ дан 5 December 2019 в 08:55
поделиться

Мы недавно выполнили подобную задачу, т.е. проект, который состоял из> 1k исходные файлы с двумя основными классами, которые должны были быть разделены. Мы закончили с четырьмя отдельными проектами, один для основных служебных классов, один для клиентского материала базы данных, один для сервера (проект является rmi-server-client), и один для клиента gui материал. Наш проект должен был быть разделен, потому что другие приложения использовали клиент в качестве командной строки только и если Вы использовали какой-либо из gui классов случайно, Вы испытывали бездисплейные исключения, которые только произошли при запуске на бездисплейном сервере развертывания.

Некоторые вещи иметь в виду на основе нашего опыта:

  • Используйте весь спринт для разделения проектов (не позволяйте другим задачам вмешаться в разделение для Вас, будет требоваться все время спринта),
  • Используйте управление версиями
  • Запишите модульные тесты перед перемещением любой функциональности где-то в другом месте
  • Используйте непрерывную систему интеграции (не имеет значения если собственной разработки или из поля),
  • Минимизируйте количество файлов в текущем changeset (Вы сохраните себя большая работа, когда необходимо будет отменить некоторые изменения),
  • Используйте аналитический инструмент зависимости полностью перед движущимися классами (мы сделали хороший опыт с DependencyFinder),
  • Не торопитесь для реструктуризации пакетов в разумный на наборы пакета проекта
  • Не бойтесь изменять интерфейсы, но иметь все зависимые проекты в рабочей области так, чтобы Вы получили все ошибки компиляции
6
ответ дан 5 December 2019 в 08:55
поделиться

Два совета: первой вещью, в которой Вы нуждаетесь, являются Наборы тестов. Второй совет состоит в том, чтобы работать в небольших шагах.

Если у Вас есть сильный набор тестов уже затем, Вы находитесь в хорошем положении. Иначе я был бы некоторые хорошие тесты высокого уровня (иначе: тестирование системы).

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

2
ответ дан 5 December 2019 в 08:55
поделиться

Я запустил бы с различных задач, которые необходимо выполнить.

Я недавно столкнулся с подобной задачей, учитывая 15-летнюю кодовую базу, которая была сделана серией разработчиков, у которых не было связи друг с другом (один, работал над проектом, оставленным, затем другой был нанят, и т.д., без перекрестных помех). Результатом является общая путаница совсем других стилей и качества.

Чтобы заставить его работать, мы должны были изолировать необходимую функциональность, отличную от декоративного пуха, чтобы заставить все это работать. Например, существует много различных строковых классов там, и один человек потратил то, что, должно быть, было большим количеством времени, делая 2k преобразование строки между COleDateTime кому: const char* и назад снова; это было пухом, код для решения задачи, вспомогательной для главной цели (получение вещей в и из базы данных).

То, что мы закончили тем, что имели необходимость сделать, было, определяют большую цель, которую этот код выполнил, и затем запись основной логики для этого. То, когда была задача, мы должны были выполнить это, мы знаем, было сделано прежде, мы нашли его и перенесли ее в вызовы библиотеки, так, чтобы это могло существовать самостоятельно. Один блок кода, например, активирует драйвер USB-устройства для создания изображения; тот код является нетронутым этим текущим проектом, но названный при необходимости через вызовы библиотеки. Другой блок кода работает аппаратный ключ безопасности, и все еще другой запрашивает удаленные серверы для данных. Это - весь необходимый код, который может инкапсулироваться. Код для прорисовки, тем не менее, был создан более чем 15 лет и такое здание к безумию, что переписывание в OpenGL в течение месяца было лучшим использованием времени, чем попытаться выяснить то, что кто-то еще сделал и затем как добавить к нему.

Я - немного handwavy здесь, потому что нашим проектом был MFC C++ к.NET C#, но основные принципы применяются:

  1. найдите главную цель
  2. определите все небольшие цели, которые делают главную цель возможной
  3. Изолируйте уже инкапсулированные части кода, если таковые имеются, чтобы использоваться в качестве вызовов библиотеки
  4. выясните логику для соединения всего этого.

Я надеюсь, что это помогает...

1
ответ дан 5 December 2019 в 08:55
поделиться

Для продолжения ответа Itay я предлагаю читать Michael Feathers, "Работающего Эффективно С Унаследованным кодом" (PDF). Он также рекомендует каждому шагу быть поддержанным тестами. Существует также версия книжной длины.

1
ответ дан 5 December 2019 в 08:55
поделиться

Знаток позволяет Вам устанавливать маленькие проекты как детям большего. Если Вы хотите извлечь часть своего проекта как отдельная библиотека для других проектов, то знаток позволяет Вам сделать это также.

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

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

1
ответ дан 5 December 2019 в 08:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: