Мне кажется, что ваши понятия "Задачи" и "Проекты" являются частью вашей модели, а не частью вашей модели представления.
Рассмотрим это концептуальное упражнение: предположим, что ваше приложение написано так, чтобы два пользователя могли использовать ваше приложение на двух отдельных компьютерах с общей базой данных, а один пользователь добавляет проект:
- Было бы хорошо или плохо, если бы проект сразу появился в раскрывающемся списке на вкладке Задачи на экране другого пользователя?
- Было бы хорошо или плохо, если Проект появился в этом раскрывающемся списке после того, как первый пользователь нажал "Сохранить" или "Подтвердить" или "ОК"?
Если ответ на один из этих вопросов «хороший», ваши данные действительно являются частью вашей модели , а не модели просмотра . И с этим надо обращаться как таковым.
Ваша модель представления должна включать вашу фактическую модель в качестве ссылки, и это хорошая вещь, чтобы как можно больше делить объекты модели между моделями представления. Фактически, в идеале большая часть вашего приложения имеет один набор объектов модели. Исключением может быть диалоговое окно, в котором вы хотите внести некоторые изменения, но затем нажать «Отмена» и не сохранять их. В этом случае кнопка «ОК» скопирует данные из модели, поддерживаемой вашим диалоговым окном, в основную модель приложения. В этом случае объекты модели, используемые диалогом и основным приложением, являются разными экземплярами одного и того же класса.
Теперь давайте рассмотрим случай, когда вы ответили «плохо» на оба этих вопроса. Это будет приложение, в котором вы никогда не сохраните свой список «Проекты» обратно в основную базу данных / документ / что угодно, но это временный список, используемый только для временной работы. В этом случае это будет действительно модель представления, и я присоединяю ее к приложению (или любой другой подходящей области) и получаю к ней доступ двумя вкладками.