Bindings i Cocoa

[080620: jag har lagt till rubriker i artikeln för att bryta ned den i mera hanterbara delar]

Äntligen har jag kommit fram till slipp-skriva-massa-kod-bindings!
Baserat på KVO och KVC så har Apple byggt upp något de kallar för “bindings”. Läs mer…

Ola Bäckström 19 juni 2008

När man gör en lite större applikation så börjar snart användargränssnittets programkod att grisa till sig. Jag har alltför ofta i jobbet sett enkla program som växt till sig och efter ett tag sett ut som spagetti därför att användarinterfacet har byggts ut ohämmat och utan god strategi.

MVC och dataflöde

Nu har fler och fler sett tjusningen med det gamla Modell-vy-kontroll mönstret (infört på 80-talet med Smalltalk) om man samtidigt har någon slags hjälpmotor för att styra informationen runt mellan dessa tre delar. Moderna exempel är Eclipse EMF (läs om .Edit framework) och .Net databinding och naturligtvis bindings i Cocoa .

Apples variant av MVC+dataflöde

Man kan säga att Bindings är en samling olika teknologier som tillsammans ger mer än summan av delarna:

  • Dataflöde (Key-value Binding), från modell över till kontoll över till vy (användargränssnittet). Detta är kanske kärnan in det större begreppet Bindings. Underliggande teknik är både KVC och KVO:, men ovanpå KVO ligger grejer som gör att olika datatyper kan hållas synkroniserade. Det hela görs i runtime och kan till exempel omvandla tal till strängar osv.
  • Standardvyer som ser till att få dataflöde baklänges vy->kontroller->model. (Här har poletten just nyligen ramlat ned hos mig… så det får bli en separat artikel om detta.)
  • Himla finurliga standard-kontrollers. NSArrayController är ett exempel. Man slipper i många fall skriva kontrollen själv utan tar standardvarianten och konfigurerar upp den enligt sina behov.
    Kontrollerna tar hand om vad som är markerat, kan filtera modelldata, ser till att inte tappa bort förändringar gjorda i inmatningsvyer osv. Mer än man tror. Ja just ja… fixar direkt kontakt mot Core Data om man vill.
  • Värdeförvandlare (value transformer) som kan användas till att förvandla data på något speciellt sätt. Man kopplar in dessa mellan vyerna och kontrollerna.
  • Integration med Interface Builder. Man kan lätt kroka upp bindings mellan vyer, kontroller och bakomliggande modellobjekt.

I praktiken?

För ögonblicket håller jag på att bygga en egen vy som kan jobba mot NSArrayController. På ett sätt kan man säga att det är enkelt, men genom att det är så mycket att tänka på samtidigt så är det grisigt: drag&drop, bindings, ansvarsfördelning vy-cell etc. Kanske är det dags för en artikel om detta? Oavsett måste jag ordna till röran i huvudet först.

,

---
---