Проект CF становится слишком большим, что делать? - PullRequest
3 голосов
/ 19 апреля 2011

Простая биллинговая система (в дополнение к ColdBox MVC) превращается в приложение для полупредприятия + предоставление ресурсов + отслеживание проблем + отслеживание прибыли.Они, кажется, делают свое дело, но у них много общего, включая общий пул клиентов и персонала (логин) и другую смешанную информацию и бизнес-логику.

Как вы поддерживаете такую ​​систему модульной?из обслуживания , тестируемости & повторного использования точка зрения?

  • одно монолитное приложение ?(т.е. новый пакет для базового приложения)
  • Модуль ColdBox ?не знаете, как сделать его «устанавливаемым» и какие преимущества он дает.
  • Java Portlet ?Понятия не имею, просто мыслить нестандартно
  • Архитектура SOA ?через вызовы API веб-сервиса?

Любая идея и / или опыт, которым вы хотели бы поделиться?

Ответы [ 5 ]

7 голосов
/ 19 апреля 2011

Я бы порекомендовал вам разбить приложение на модульные части с помощью модулей ColdBox. Вы также можете исследовать отдельную бизнес-логику на уровне RESTful ColdBox и, таким образом, присоединиться к системе. Опять же, все зависит от ваших требований и потребностей на данный момент.

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

3 голосов
/ 19 апреля 2011

Перестаньте думать о технологиях (например, Java-порталах, модулях ColdBox и т. Д.) И сосредоточьтесь на архитектуре. Под этим я имею в виду, как вы можете объяснить свою систему наблюдателю. Начните с рисования набора полей на доске, которые представляют каждую деталь - инвентарь, клиенты, отслеживание проблем и т. Д. - и затем используйте линии, чтобы показать взаимодействие между этими системами. Это фокусирует вас на разделении интересов , которое группируется как функциональность. Для начала не беспокойтесь об интерфейсе, вместо этого сосредоточьтесь на алгоритмах и данных.

Если вы говорите о MVC, то этот шаг фокусируется на модели. После завершения этого действия наступает сложная часть: модификация кода для соответствия этой диаграмме (то есть модели). Чтобы действительно понять, как должна выглядеть эта модель, я предлагаю прочитать Domain Driven Design Эрика Эванса. Цель состоит в том, чтобы прийти к модели, отношения которой управляются через внедрение зависимостей . Предположительно, это оставляет вас с набором высокоуровневых ХФУ - услуг, если хотите, - с базовыми бизнес-объектами и управлением постоянством. Их отношения лучше всего управляются с помощью своего рода локатора контейнеров / сервисов, который, как я полагаю, имеет ColdBox, другой пример - ColdSpring.

Результатом этой работы является модель, которую можно протестировать на модуле. Независимо от пользовательского интерфейса. Если все это сбивает с толку, я бы посоветовал взглянуть на Эффективная работа с устаревшим кодом для некоторых идей о том, как осуществить этот переход.

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

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

Обновление

Повторюсь, технология не решит вашу проблему. Продолжение итерации к более сплоченным объектам будет.

Теперь, что касается связанных данных, с ORM вы сделали компромисс, и у монолитных систем есть свои преимущества. Другой подход - дать одному объекту с состоянием ссылку на объект службы другого через DI, чтобы вы могли получить его через него. Это позволит вам смоделировать его с целью модульного тестирования и заменить его аналогичным сервисным объектом и соответствующим объектом для облегчения повторного использования в других контекстах.

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

2 голосов
/ 19 апреля 2011

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

В ColdBox существует множество документов и примеров ...

http://wiki.coldbox.org/wiki/Modules.cfm

http://experts.adobeconnect.com/p21086674/

1 голос
/ 24 апреля 2011

К счастью, проблема, с которой мы здесь сталкиваемся, не уникальна.

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

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

К счастью, мы можем изучить некоторые существующие ERP-системы, которые вы можете использовать, чтобы увидеть, как они справляются с некоторыми изпроблемы.Есть несколько хороших ERP-программ с открытым исходным кодом, и мне пришло в голову, что это полный цикл установки SAP Business One, который я наблюдал (ERP небольшого и среднего размера, которая обходит проблемы большого SAP).

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

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

ERPS управляют двумя основными мирами:

  1. Производство товаров
  2. Доставка услуги

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

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

  1. Создание потенциальных клиентов -> Возможности продаж
  2. Возможности продаж -> Цитировать /Смета
  3. Цитата Смета -> Заказ на продажу
  4. Заказ на продажу -> Производственный заказ (Построить или назначить кого-либо для выполнения работы)
  5. Производственный заказ ->Заказы на поставку (Заказывайте необходимые материалы или специалистов, чтобы прибыть при необходимости)
  6. Производственный заказ -> Планирование производства (Что будет построено, когда или Кто это сделает, когда?)
  7. График производства -> Продукция!(Выполните работу)
  8. Произведенные услуги / Товары -> Корректировки инвентаризации - при необходимости преобразуйте все сырые запасы в готовую продукцию или подготовьте ее к отправке
  9. Готовые товары / Услуги ->Упаковочный лист
  10. Элементы упаковочного листа -> Счет-фактура

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

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

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

Для ERP я всегда предпочитал транзакционный «основной» модуль, который все остальныепровайдеры транзакций (выставление счетов за продвижение процесса, как только он определен).

Когда я преобразовал Lotus Notes ERP с 90-х годов в SAP ERP, приложение Lotus Notes было превосходным, оно обрабатывало все как и должно.Были некоторые мини-приложения, построенные на стороне, которые не были интегрированы как модули, что было главной причиной избавления от него.

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

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

Надеюсь, что это помогло!Поделитесь, что вы в конечном итоге делаете, если не возражаете, если что-то, о чем я упомянул, нуждается в дополнительном объяснении, напишите мне здесь или в твиттере :) @ JasPanesar

1 голос
/ 19 апреля 2011

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

Итак, на стороне сервера у вас есть слои DAO и FACADE.А клиентская сторона может быть MVC или любой другой архитектурой, которую вы хотите использовать, находясь где-то еще.Вы даже можете иметь отдельного клиента для каждого отдельного бизнеса.

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

...