В приложении какао на основе документов кто отвечает?

Согласно Руководству по приложениям на основе документов должны быть DocumentController, Document и WindowController. У меня проблемы с тем, чтобы научиться судить о том, где должна падать та или иная ответственность.

Мой документ представляет список задач. Данный список задач читается моим документом в памяти и отображается WindowController. Количество задач, которые могут поместиться в окне в любое время, определяется размером окна, поэтому, когда мне нужно отобразить задачи, мой WindowController запрашивает у моего документа достаточно задач, чтобы заполнить видимый список.

Если я хочу, я могу искать в своих задачах с помощью регулярных выражений (я знаю, это правильно), и совпадения возвращаются в качестве лучших результатов. В этом случае мне не совсем понятно, где лежат обязанности. Документ посвящен сохранению и загрузке списка задач, но выше я также попросил его вернуть небольшие части списка в WindowController. Должна ли логика сопоставления войти в Документ? Или это должно остаться в WindowController, поскольку он не имеет ничего общего с сохранением и загрузкой данных (порядок задач после поиска никогда не сохраняется на диск)? Это те вопросы, которые я задаю себе (себе). Когда я оглядываюсь на проект, подобный этому, я замечаю места, где мои суждения о суждениях кажутся противоречащими друг другу. Иногда я провожу час, просто перемещая одну логику между двумя... пытаясь представить, какой дизайн имеет больше смысла.

Очевидно, мне нужна помощь.

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

Этот вопрос был полезен, но я все еще в замешательстве.

Спасибо!

1 ответ

Решение

Мой инстинкт в этом случае должен был бы поместить логику в оконный контроллер. Функциональность поиска не влияет на реальную модель, и я думаю о NSDocument как более "модель-контроллер".

NSWindowController лучше подходит для управления деталями пользовательского интерфейса ("UI-контроллер"), и, по сути, вы просто управляете представлением модели с помощью панели поиска.

Да я знаю что у нас NSViewController также, но иногда это просто дополнительная сложность ради этого. Большую часть времени, NSWindowController просто отлично.

Другие вопросы по тегам