MVC со строками данных? - PullRequest
0 голосов
/ 08 июля 2010

У меня есть Java-приложение, отличное от MVC, которое я работаю над рефакторингом в MVC для дальнейшего сопровождения. Графический интерфейс приложения включает в себя произвольное количество строк, каждая из которых представлена ​​JPanel, содержащей несколько элементов управления. Я реорганизовал логику для каждой строки в класс модели и настроил простой контроллер в соответствии с шаблоном, изложенным в этой статье центра Java-разработки . Я не хочу вставлять весь скелет MVC этого кода, но по сути он предполагает, что будет только один View и одна Model каждого класса вокруг, и что у каждой Model будут уникальные имена методов. Все работает нормально, пока есть только одна модель и один контроллер.

Проблема: у меня теперь есть n RowViews и n RowModels, все они добавлены в контроллер. Когда я обновляю любое текстовое поле в RowView, все RowModels обновляются. Я вижу модификацию контроллера для хранения пары хэшей, отображающих представление в модель и наоборот, но это, кажется, нарушает принцип тонких контроллеров. Я чувствую, что упускаю что-то очевидное здесь, в плане дизайна и стратегии. Есть мысли по решению этой проблемы?

1 Ответ

1 голос
/ 08 июля 2010

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

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

// View
List<Model> modelsToDisplay = controller.someFunctionToLoadModels();
for (Model m : modelsToDisplay) {
    addModelToView(m);
}

...

public void addModelToView(Model m) {
    ViewPartial vp = generateViewPartialForModel(m);
    this.viewPartials.add(vp);
}

...

public ViewPartial generateViewPartialForModel(Model m) {
    ViewPartial vp = new ViewPartial();
    vp.setLabel(m.getName());
    vp.setTextValue(m.getValue());
    return vp;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...