MVC ilovalari uchun dizayn ko'rsatmalar Ilovalarni loyihalashda Model-View-Controller mulohazalari uchun quyidagi ko'rsatmalar qo'llaniladi:
Vositachi boshqaruvchi sifatida NSObject ning maxsus quyi sinfi namunasidan foydalanishingiz mumkin bo'lsa-da, uni bitta qilish uchun zarur bo'lgan barcha ishlarni bajarish uchun hech qanday sabab yo'q. Buning o'rniga kakao bog'lash texnologiyasi uchun mo'ljallangan tayyor NSController obyektlaridan birini ishlating; ya'ni NSObjectController, NSArrayController, NSUserDefaultsController yoki NSTreeController misolidan yoki ushbu aniq NSController quyi sinflaridan birining maxsus quyi sinfidan foydalaning.
Biroq, agar dastur juda sodda bo'lsa va siz rozetkalar va maqsadli harakatlar yordamida vositachilik xatti-harakatini amalga oshirish uchun zarur bo'lgan elim kodini yozishni qulayroq his qilsangiz, vositachi boshqaruvchi sifatida maxsus NSObject kichik sinfining namunasidan foydalaning. Maxsus NSObject kichik sinfida siz kalit-qiymatni kodlash, kalit-qiymatni kuzatish va tahrirlovchi protokollaridan foydalangan holda NSController ma'nosida vositachi boshqaruvchini ham amalga oshirishingiz mumkin.
MVC rollarini ob'ektda birlashtira olsangiz ham, eng yaxshi umumiy strategiya rollar orasidagi farqni saqlashdir. Bu ajratish ob'ektlarning qayta foydalanish imkoniyatini va ular qo'llaniladigan dasturning kengaytirilishini oshiradi. Agar siz sinfdagi MVC rollarini birlashtirmoqchi bo'lsangiz, o'sha sinf uchun asosiy rolni tanlang va keyin (xizmat ko'rsatish maqsadida) bir xildagi toifalardan foydalaning. Boshqa rollarni o'ynash uchun sinfni kengaytirish uchun dastur fayli.
Yaxshi ishlab chiqilgan MVC ilovasining maqsadi (nazariy jihatdan, hech bo'lmaganda) qayta foydalanish mumkin bo'lgan imkon qadar ko'proq ob'ektlardan foydalanish bo'lishi kerak. Xususan, ko'rish ob'ektlari va model ob'ektlari yuqori darajada qayta foydalanishga yaroqli bo'lishi kerak. (Tayyor vositachi boshqaruvchi ob'ektlari, albatta, qayta foydalanish mumkin.) Ilovaga xos xatti-harakatlar tez-tez kontroller ob'ektlarida imkon qadar ko'proq to'planadi.
Holatdagi o'zgarishlarni aniqlash uchun modellarni to'g'ridan-to'g'ri kuzatish mumkin bo'lsa-da, buni qilmaslik yaxshiroqdir. Ko'rish ob'ekti model ob'ektidagi o'zgarishlar haqida bilish uchun har doim vositachi boshqaruvchi ob'ektidan o'tishi kerak. Buning sababi ikki xil:
Ob'ektlarni to'g'ridan-to'g'ri model ob'ektlarining xususiyatlarini kuzatish uchun bog'lash mexanizmidan foydalansangiz, siz NSController va uning quyi sinflari ilovangizga beradigan barcha afzalliklarni chetlab o'tasiz: tanlash va to'ldiruvchini boshqarish, shuningdek o'zgarishlarni amalga oshirish va bekor qilish qobiliyati.
Agar siz bog'lash mexanizmidan foydalanmasangiz, model ob'ekti tomonidan e'lon qilingan o'zgartirish bildirishnomalarini kuzatish qobiliyatini qo'shish uchun mavjud ko'rinish sinfini pastki sinfga kiritishingiz kerak.
Ilovangiz sinflarida kodga bog'liqlikni cheklashga harakat qiling. Sinfning boshqa sinfga bog'liqligi qanchalik katta bo'lsa, uni qayta ishlatish shunchalik kam bo'ladi. Maxsus tavsiyalar ikkita sinfning MVC rollariga qarab farqlanadi:
Ko'rish klassi model sinfiga bog'liq bo'lmasligi kerak (garchi ba'zi maxsus ko'rinishlarda bu muqarrar bo'lishi mumkin).
Ko'rish sinfi vositachi boshqaruvchi sinfiga bog'liq bo'lmasligi kerak.
Model sinfi boshqa model sinflaridan boshqa hech narsaga bog'liq bo'lmasligi kerak.
Vositachi boshqaruvchi klassi model sinfiga bog'liq bo'lmasligi kerak (garchi ko'rinishlar kabi, bu maxsus kontroller sinfi bo'lsa kerak bo'lishi mumkin).
Vositachi nazoratchi sinfi ko'rish sinflariga yoki nazoratchi sinflarini muvofiqlashtirishga bog'liq bo'lmasligi kerak.
Muvofiqlashtiruvchi kontroller klassi barcha MVC rol turlarining sinflariga bog'liq.
Agar Cocoa dasturlash muammosini hal qiladigan arxitekturani taklif qilsa va bu arxitektura ma'lum turdagi ob'ektlarga MVC rollarini tayinlasa, ushbu arxitekturadan foydalaning. Agar shunday qilsangiz, loyihangizni birlashtirish ancha oson bo'ladi. Hujjat arxitekturasi, masalan, NSDocument ob'ektini (har bir nib modeli boshqaruvchisi) Fayl egasi sifatida sozlaydigan Xcode loyihasi shablonini o'z ichiga oladi.