Должен ли я использовать привязки Cocoa для моего последнего проекта?

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

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


person Lawrence Johnston    schedule 10.11.2008    source источник


Ответы (7)


Используйте привязки.

Обратите внимание, что вы должны следовать шаблону MVC, чтобы получить максимальную отдачу от привязок. Это проще, чем кажется, так как сейчас Cocoa делает за вас практически все:

  1. Просмотр: NSView и подклассы (разумеется), NSCell и подклассы, NSWindow и подклассы
  2. Контроллер: NSController и подклассы (особенно NSArrayController)
  3. Модель: основные данные

Если вы не собираетесь использовать Core Data, вы можете свернуть свои собственные объекты модели, но это несложно. Большинство методов этих объектов будут простыми средствами доступа, которые вы можете просто @synthesize использовать, если вы ориентируетесь на Leopard.

Обычно вы не можете обойтись без написания кода, но Bindings позволяет вам писать очень мало кода.

Рекомендуемое чтение:

person Peter Hosey    schedule 10.11.2008
comment
Кроме того, привязки, после того, как вы их поняли, просты и могут быть действительно мощными, для меня нет причин не использовать их. - person Georg Schölly; 15.01.2009

Привязки могут казаться волшебными по своей природе. Чтобы понять магию привязок, я думаю, нужно хорошо разбираться в KVC/KVO. Я действительно имею в виду основательно.

Однако в моем случае (новичок в Obj-C -- 9 месяцев) получение креплений KVC/KVO было волнением. Это значительно сократило мой клей-код и значительно облегчило мою жизнь. Отладка привязок превратилась в проверку наблюдаемости моих изменений ключ-значение. Я обнаружил, что могу тратить больше времени на написание того, что должно делать мое приложение, вместо того, чтобы следить за тем, чтобы представление отражало данные.

Хотя я согласен с тем, что привязки поначалу очень пугают.

person Giao    schedule 10.11.2008

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

person Brian Webster    schedule 10.11.2008

Через некоторое время работы с Bindings я обнаружил, что это вовсе не магия, а достаточно продвинутая технология. Для отладки связанного интерфейса используются другие методы, чем для склеенного интерфейса, но как только у вас есть эти методы, преимущества с точки зрения повторного использования, ремонтопригодности и согласованности становятся значительными для IMO.

person Community    schedule 10.11.2008
comment
Не могли бы вы уточнить или указать мне на какие-либо учебные пособия/документацию по методам отладки для связанных интерфейсов? - person Lawrence Johnston; 10.11.2008
comment
Одна из самых простых вещей заключается в том, что, поскольку интерфейс и модель связаны только ключевыми путями, очень легко заглушить или имитировать части модели, привязав ваш интерфейс к тестовому драйверу, а не к реальной модели. - person ; 11.11.2008

Кажется, что я использую привязки, KVO и методы источников данных примерно одинаково в своих приложениях. Это действительно зависит от контекста. Например, в одном из моих проектов я использую привязки почти везде, кроме представления структуры главного окна, которое достаточно сложно, и я не хотел бы даже пытаться вписать его в NSTreeController. В то же время я также использую KVO для перезагрузки объектов пользовательского интерфейса и отслеживания зависимостей в объектах моей модели.

При изучении сложных тем Cocoa, таких как Bindings или Core Data, важно помнить, что вы должны понимать все технологии, лежащие в их основе; все от протоколов источников данных, уведомлений КВО и тд. Когда у вас будет достаточно опыта работы с ними, чтобы понять, как работает «магия», вы сможете с легкостью интегрировать в свое приложение материал более высокого уровня.

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

person Marc Charbonneau    schedule 17.11.2008

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

person Community    schedule 15.01.2009

Для любопытных, я в конечном итоге использовал привязки, и через пару дней они внезапно начали «иметь смысл». Поэтому я определенно рекомендую просто пойти дальше и потратить время на их изучение.

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

person Lawrence Johnston    schedule 15.01.2009