В приложении какао на основе документов кто отвечает?
Согласно Руководству по приложениям на основе документов должны быть DocumentController, Document и WindowController. У меня проблемы с тем, чтобы научиться судить о том, где должна падать та или иная ответственность.
Мой документ представляет список задач. Данный список задач читается моим документом в памяти и отображается WindowController. Количество задач, которые могут поместиться в окне в любое время, определяется размером окна, поэтому, когда мне нужно отобразить задачи, мой WindowController запрашивает у моего документа достаточно задач, чтобы заполнить видимый список.
Если я хочу, я могу искать в своих задачах с помощью регулярных выражений (я знаю, это правильно), и совпадения возвращаются в качестве лучших результатов. В этом случае мне не совсем понятно, где лежат обязанности. Документ посвящен сохранению и загрузке списка задач, но выше я также попросил его вернуть небольшие части списка в WindowController. Должна ли логика сопоставления войти в Документ? Или это должно остаться в WindowController, поскольку он не имеет ничего общего с сохранением и загрузкой данных (порядок задач после поиска никогда не сохраняется на диск)? Это те вопросы, которые я задаю себе (себе). Когда я оглядываюсь на проект, подобный этому, я замечаю места, где мои суждения о суждениях кажутся противоречащими друг другу. Иногда я провожу час, просто перемещая одну логику между двумя... пытаясь представить, какой дизайн имеет больше смысла.
Очевидно, мне нужна помощь.
Мой пример очень специфической ситуации, но я не заинтересован в конкретном решении. Мне интересно знать в более общих чертах, какими должны быть обязанности этих трех классов. Я прочитал руководство и немного погуглил, но все еще не могу понять, как с ним справиться.
Этот вопрос был полезен, но я все еще в замешательстве.
Спасибо!
1 ответ
Мой инстинкт в этом случае должен был бы поместить логику в оконный контроллер. Функциональность поиска не влияет на реальную модель, и я думаю о NSDocument
как более "модель-контроллер".
NSWindowController
лучше подходит для управления деталями пользовательского интерфейса ("UI-контроллер"), и, по сути, вы просто управляете представлением модели с помощью панели поиска.
Да я знаю что у нас NSViewController
также, но иногда это просто дополнительная сложность ради этого. Большую часть времени, NSWindowController
просто отлично.