2009-04-21 2 views
1

Я пытаюсь реализовать какой-то MVC в Java. На самом деле это скорее MVP, но это не имеет большого значения для моей проблемы.Циклическая зависимость двух проектов eclipse

Следующая ситуация: У меня есть графический интерфейс, выполненный с помощью Netbeans (из-за лучшего GUIeditor), который обновляется и изменяется часто.

Как мой основной проект проще в Eclipse, я решил импортировать проект Netbeans в Eclipse как отдельный проект. Итак, я здесь с проектом «App», содержащим контроллер и модельный пакет, и проект «GUI», содержащий пакет просмотра. Проблема в том, что шаблон, который я следую, имеет циклическую зависимость между представлением и контроллером. Всякий раз, когда представление изменяется, контроллер получает уведомление, решает, какие данные нужно получить от модели, а затем вносит изменения в представление.

Когда я добавляю App в путь сборки GUI, и в остальном я получаю сообщение об ошибке «Цикл был обнаружен в пути сборки проекта« GUI ». Я имею в виду, что это правда, этот цикл уже в моем дизайне.

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

package view; 
import controller.*; 
class viewA{ 
    ... 
    public viewA() { 
     controllerA.register(this); 
    } 
    ... 
} 

package controller; 
import view.*; 
class controllerA implements SomeListener{ 
    ... 
    protected viewA[] registeredViews; 
    public static register(viewA interestedView){ 
     arrayPush(registeredViews,interestedView); 
     interestedView.addSomeListener(this)  
    } 
    ... 
} 

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

Я хотел бы сохранить эту структуру проекта, а также придерживаться своей архитектуры MVC. Как я могу обойти это? Каковы ваши предложения?

ответ

6

У вас есть ваши слушатели назад с обычного пути - обычно у контроллера есть инициатива. Он создает объект вида и регистрируется как слушатель для событий просмотра.

Кроме того, тип слушателя должен быть интерфейсом, определенным в проекте View. Затем Contoller реализует этот интерфейс, и представление не обязательно должно знать о конкретных классах контроллера. Цикл разрешен. Конечно, вы можете сделать это и в своей «обратной» настройке.

2

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

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

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

Если вы действительно хотите этого избежать, вам может понадобиться инъекция зависимости, например Spring.

4

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

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

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

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

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

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

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

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

Возможно, вы захотите прочитать о the-mythical-business-layer.

1

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

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

  • Нет связанных вопросов^_^