Apple'ın Kakao çerçeveler için tasarım desenleri: MVC, MVP, Pasif Görünüm ... nereye Elma ilerliyor?

oy
12

Bu soru için zemin hazırlamak için, ben MVC, MVP ve aşağıdakiler arasından Pasif View için benim tanımları alıyorum belirtmek için gidiyorum:

Model View Controller (MVC)
modeli görünüm Sunucu (MVP)
Pasif (PV)

Elma her zaman MVC tasarım deseni kullandığını belirtmiştir, ama ben OS X 10.5 fark biz kazanılmış ettik NSViewController, KVO, bağlamaları, vb daha Pasif Görünüm tasarım deseni gibi davranmaya görünüyor nesneler. Elma kafa istiyor bu nereye mi? Ben Elma nereye gittiğini bilmek istiyorum neden olan bir oynar şekilde yanısıra mümkün olan Apple'ın seçtiği tasarım desenleri, benim kod planlamak istiyorum. Herkes bir ipucu var mı?

Oluştur 09/12/2008 saat 18:57
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
7

Her karmaşıklığı herhangi bir kod farklı desenler geçerli olabilir çok yeri vardır. sizin fonksiyonel kod (model), UI kodu veya IB tasarımı (görünüm) arasındaki ilişkileri ve bunları birbirine bağlayan (kontrolör) Kakao hizmetlerini açıklar çünkü MVC Kakao belgelerde belirgindir. Yani biraz "uyandırma çağrısı" gerekir çünkü bunu tüm kendiniz yazmak zorunda düşünmeyi bırakıp, ve benzersiz parçaları dizayn nasıl düşünmeye başlamak, ve yapılacak çerçeve güvenmek, özellikle tanıtım dox içinde, değer vurgu var onun sıhhi tesisat işi.

MGD varyant tanımları efsanevi vardır ve MVC, kanonik "Gang of Four" kitabında tarif olmadığını belirtmekte fayda var "Design Patterns." Bu Kakao "MVC" modeli (terminoloji kaynaklandığı yer olan) SmallTalk 80 MVC ile aynı olmadığını itiraf etmek de faydalıdır.

Muhtemelen aynı zamanda "GoF" aslında belgelerin belirli bir tarz, desen açıklar kod tasarımı değil soyut yolla ifade edilmesi kelime "desen" kullandığı belirtmekte fayda var. Bu kullanımın büyük ölçüde kaybedildiğini çok kötü. Hepimizin kelime bu şekilde anlamış, o zaman ben "birisi aslında Kakao MVC için bir model yazma olsaydı gerçekten faydalı olacaktır." denebilir Sonra hepimiz çok karışık olmaz!

Cevap 10/12/2008 saat 19:22
kaynak kullanıcı

oy
4

Kakao olan MVC dayanan (aynı Elma tanımlar ) ve sizin için her zaman daha yapmanın bir eğilim olmuştur. İşte şu anda böyle.

  • Görünüm katman: NSView, NSWindow, NSCell, onların alt sınıfları ve CALayer
  • Kontrol tabakası (10.3 beri): NSController ve alt sınıfları (baskın olarak NSArrayController)
  • Model katmanı: Geleneksel olarak, tamamen kendiniz yapmak zorunda kaldı, ama 10.4 beri sen Çekirdek Verileri kullanma mümkün olabilir.

Bağlama Kvo (ve KVC) tarafından desteklenmektedir ve birlikte üç kat bağlayan tutkal olan edilir. Sen modele denetleyicileri için görüş ve denetleyicileri bağlamak.

Cevap 09/12/2008 saat 23:41
kaynak kullanıcı

oy
3

Ben orada açıklanandan olarak Kakao pasif görünüm desen izler söyleyemem. Denetleyici görünümü hazırlamak ve değişim bildirimleri gönderirken tüm çalışır olduğunu söylüyor. Kakao bir görünüşüdür nesne, tipik olarak, bu için bağlı denetleyicisinden verileri yenilemek, modelden (bağları aracılığıyla) KVO bildirimleri yanıt olan veri formatlayıcılar veya değer transformatörleri yoluyla hazırlamak, ve son olarak da ekranda görüntülenir.

Tipik olarak, 'kumanda' kısmının bir görünüşüdür kontrol ve model kontrol ayrılmıştır, ancak kakao, oldukça iyi MVC izler. Bu konuda daha fazla bilgi bulabilirsiniz burada . Eğer karıştı nereye üzerinde herhangi spesifik örnekler varsa, belki Kakao şeyler yapar yolda daha fazla ayrıntı sağlayabilir.

Aynı rehber itibaren bu bölüm bazı ek tasarım desenleri yararlı bulabileceğiniz açıklar. Kendi tecrübelerime rağmen Cocoa MVC oldukça doğal geliyor eğilimi birkaç projeler yoluyla çalıştıktan sonra, ben bu konuda çok endişe olmaz.

Cevap 09/12/2008 saat 19:13
kaynak kullanıcı

oy
2

Elma dokümanlar aslında MVC okudum her şeyden daha iyi açıklar. Bir bileşiği, desen, çünkü temel olarak MVC ilişkin karışıklık. Birçok temel desen oluşur. MVC tartışılan değildi, ancak tasarım Pattern ile dört Gang , temel desen edildi.

Bence temel fark Elma dünyada Kontrolör normalde ne ek olarak bir arabulucu model olmasıdır.

Apple'ın dünyanın geleneksel yaklaşım modellerinin aksine Yani değişim görüşlerini bildirme. Bunlar aslında kimseye bildirme. Eğer bir modelini değiştirmek istiyorsanız da herkesin, değişikliklerden haberdar edilir hale getirmek için kontrolör vasıtasıyla bunu yapmak zorunda.

Ben bu yaklaşım geleneksel olandan çok daha iyi olduğunu düşünüyorum. Bu modelin nesneler üzerinde hiçbir kısıtlamalar koyar. Onlar herhangi bir özel arabirim uygulamak gerekmez. Onlar sadece domain belirli sorunları çözmek zorunda. Böylece çok kolay diğer uygulamalarda yeniden kullanabilirsiniz.

Esas olarak, bu yaklaşım yazılabilir gereken kontrol nesneleri. Tabii Elma bağlamaları ile değiştirdi. Ama sonra Kontrolörleri bağlamaları kullanmıyorsanız özel uygulamasıdır.

C Apple MVC kullanarak ++

Qt kullanarak C ++ uygulamaları programlarken Aslında Apple'ın tasarımını izledi. Görüntüleme QWidget en bulunmaktadır. Bir QWidget alt sınıfta görünüm ile ilgisi var tüm kodu koydu. Sonra benim denetleyicisi bir QObject alt sınıf yapmak ve görünüm nesneleri oluşturmak ve benim QObject Denetleyicisi yarıklara QWidgets gelen sinyalleri bağlamak var. Benim model sınıf Qt bir şey devralan ve iş mantığını uygulamak gerekmez düzenli sınıftır. Bu kontrolörler yuvaları tarafından modifiye alır.

Alternatif QWidgets kontrolörün dışında oluşturulabilir, böylece görünümler diğer türleri için kontrolörü yeniden kullanabilirsiniz.

Bu kimseyi yardımcı olur, ama biz desen elde etmek için kullanılan bir statik olarak yazılan C gibi dilin ++ ve Java açısından açıklanmıştır, çünkü C ++ açısından Kakao desenlerinin düşünmek bazen daha kolay olduğunu düşünüyorum emin değilim.

Cevap 08/03/2009 saat 15:29
kaynak kullanıcı

oy
2

O Örneğin, için, açıklanan gibi ben Kakao / OpenStep Hiç gerçekten MVC takip ettiğini sanmıyorum smalltalk 80 . SmallTalk Kontrolör gerçekten Kakao durumunda Görünüm katmanı tarafından bu nedenle NSControl tarafından ele alınır ve View, kullanıcı etkileşimini yorumlamak sorumludur şeydir (belki de çerçeve içine bu şekilde ayrışmış, ama biz gerekmiyor içinde gözetleme, yani soyutlama tüm :-) işte budur. Kakao Bağlar çeşitli NS * Denetleyici sınıfları dikkate özellikle senin bu bağlantılardan ilgili olarak, kakao içinde Kontrolör tabakası gerçekten Sunucu bayrağı altında düşüş yok. Bunlar gerçekten bir görünüm katmanı ve bir modeli arasında bir mekik vardır.

Kendi uygulamalarda bile onlar açıkça ayrı değildir yerlerde dört ayrı katmanları, sahip olma eğilimindedir; görünüm, sunum, hizmet ve model. Ardından "sunum kontrolörleri" ve "hizmet kontrolörleri" tamamen ayrı amaçları vardır; mantık ve süreçler hizmetlerinde, ve iş akışı ve kullanım durumları görünümü denetleyicileri vardır. Eğer bu tür bir şey içine eğer ambalaj açısından, hizmetler ve model araya durumdan bağımsız olabilir soyut bir "şeyler şeyler yapmak" temsil eder. sunum ve görünümler temsil "ve bu Mac OS X uygulamasının bir kullanıcı bunu kullanmak istiyorum nasıl" alt pakete bağlıdır ve AppKit-özgül (ve AHIG özel) sınıfları ve davranış kapsüller hangi.

Cevap 09/12/2008 saat 19:37
kaynak kullanıcı

oy
1

Hata. MVC geçmiş en misquoted deseni =. Bundan en az 5 farklı tanımları okudum.

Sen bu makaleyi okumak isteyebilirsiniz Martin Fowler

Cevap 09/12/2008 saat 19:46
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more