
Για να θέσει τις βάσεις για αυτό το θέμα, θα πάω να δηλώσω ότι είμαι πάρει ορισμούς μου για MVC, MVP και παθητική Θέα από το ακόλουθο κείμενο:


[Model View Controller (MVC)](http://en.wikipedia.org/wiki/Model-view-controller)   

[Μοντέλο Προβολή παρουσιαστή (MVP)](http://en.wikipedia.org/wiki/Model_View_Presenter)   

[Παθητική View (PV)](http://www.martinfowler.com/eaaDev/PassiveScreen.html)  



Η Apple έχει πάντα δήλωσε ότι χρησιμοποιεί το πρότυπο σχεδιασμού MVC, αλλά είδα στο OS X 10.5 έχουμε πάρει NSViewController, κνθ, συνδέσεις, κλπ, τα αντικείμενα που φαίνονται να συμπεριφέρονται περισσότερο σαν το παθητικό πρότυπο Προβολή σχεδίασης. Είναι αυτό όπου η Apple θέλει να το κεφάλι; Θέλω να σχεδιάσουν τον κωδικό μου με έναν τρόπο που παίζει όσο το δυνατόν καλύτερα με επέλεξαν τα σχεδιαστικά πρότυπα της Apple, η οποία είναι ο λόγος που θέλω να ξέρω όπου η Apple είναι επικεφαλής. Υπάρχει κάποιος που έχει μια ιδέα;

 
πρότυπα σχεδιασμού για πλαίσια κακάο της Apple: MVC, MVP, παθητική View ... όπου οδεύει η Apple;
================================================================================================



Κάθε κώδικα οποιασδήποτε πολυπλοκότητας έχει πολλά μέρη όπου μπορεί να ισχύουν διαφορετικά πρότυπα. MVC είναι εμφανή στα έγγραφα κακάο, επειδή εξηγεί τις σχέσεις μεταξύ των λειτουργικών κωδικό σας (το μοντέλο), τον κωδικό UI σας ή IB του σχεδιασμού (η θέα), καθώς και τις υπηρεσίες κακάο που τους δένουν μαζί (ο ελεγκτής). Αυτό είναι που αξίζει έμφαση, κυρίως στο εισαγωγικό DOX, γιατί θα πρέπει να έχετε ένα μικρό «κλήση αφύπνισης» για να σταματήσει να σκέφτεται έχετε να γράψετε όλα μόνοι σας, και να αρχίσουμε να σκεφτόμαστε για το πώς να σχεδιάσουν μοναδικά μέρη σας, και να εμπιστεύονται το πλαίσιο για να κάνει τους εργασίας υδραυλικών εγκαταστάσεων.


Οι ορισμοί παραλλαγή του MVC είναι θρυλική, και αξίζει να σημειωθεί ότι MVC δεν περιγράφεται στην κανονική «Συμμορία των Τεσσάρων» βιβλίο, «Πρότυπα σχεδιασμού.» Είναι, επίσης, αξίζει τον κόπο να παραδεχτούμε ότι το μοντέλο «MVC» Κακάο δεν είναι το ίδιο με το SmallTalk 80 MVC (η οποία είναι όπου η ορολογία προέρχεται).


Είναι πιθανόν επίσης να υπενθυμίσουμε ότι «GoF» χρησιμοποιεί την λέξη «σχέδιο» για να υποδηλώσει ένα συγκεκριμένο στυλ της τεκμηρίωσης, δεν το αφηρημένο τρόπο σχεδιασμού κώδικα που περιγράφει το πρότυπο. Είναι πάρα πολύ κακό ότι αυτή η χρήση έχει σε μεγάλο βαθμό χαθεί. Αν όλοι κατανοήσει τον λόγο αυτόν τον τρόπο, τότε θα μπορούσα να πω «θα ήταν πολύ χρήσιμο αν κάποιος θα έγραφε στην πραγματικότητα ένα σχέδιο για MVC κακάο του.» Τότε δεν θα είναι όλα τόσο συγκεχυμένη!

 

Κακάο *είναι* βασισμένο σε MVC (όπως [η Apple ορίζει](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html%23//apple_ref/doc/uid/TP40002974-CH6-SW1 "Κακάο Βασικές Οδηγός: Πρότυπα Σχεδιασμού Κακάο") ), και ήταν πάντα σε μια πορεία για να γίνει όλο και περισσότερο για σας. Εδώ είναι πώς είναι σήμερα.


* Προβολή στρώμα: NSView, NSWindow, NSCell, υποκατηγορίες τους, και CALayer
* στρώμα Controller (από 10.3): NSController και υποκατηγορίες (κυρίως NSArrayController)
* Μοντέλο στρώμα: Παραδοσιακά, θα έπρεπε να το κάνετε αυτό εντελώς τον εαυτό σας, αλλά από 10,4, ενδέχεται να μπορείτε να χρησιμοποιήσετε Βασικών Δεδομένων.


Οι δέστρες τροφοδοτείται από κνθ (και KVC), και είναι η κόλλα που δεσμεύουν τα τρία στρώματα μαζί. Μπορείτε δεσμεύουν τις απόψεις των ελεγκτών και των ελεγκτών για το μοντέλο.

 

Δεν θα έλεγα το κακάο ακολουθεί το παθητικό πρότυπο άποψη, όπως είναι περιγράφεται εκεί. Είναι λέγοντας ότι ο ελεγκτής κάνει όλη τη δουλειά για την προετοιμασία της ενόψει και την αποστολή ειδοποιήσεων αλλαγή. Σε Κακάο ένα αντικείμενο άποψη τυπικά θα ανταποκριθεί στις ειδοποιήσεις κνθ (μέσω δέστρες) από το μοντέλο, ανανεώσετε τα δεδομένα από τον ελεγκτή που είναι βέβαιο ότι, την προετοιμασία μέσω διαμορφωτές δεδομένων ή μετασχηματιστές αξίας, και, τέλος, να εμφανιστεί στην οθόνη.


Κακάο εξής MVC αρκετά καλά, αν και τυπικά η πτυχή «ελεγκτής» χωρίζεται σε ελεγκτές θέα και ελεγκτές μοντέλο. Μπορείτε να διαβάσετε περισσότερα για αυτό [εδώ](http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/chapter_5_section_4.html) . Αν έχετε οποιαδήποτε συγκεκριμένα παραδείγματα σχετικά με το πού είστε σε σύγχυση, ίσως μπορεί να δώσει περισσότερες λεπτομέρειες σχετικά με τον τρόπο κακάο κάνει τα πράγματα.


Από τον ίδιο τον οδηγό, [η ενότητα αυτή](http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/chapter_5_section_3.html#//apple_ref/doc/uid/TP40002974-CH6-SW5) εξηγεί ορισμένα πρόσθετα σχεδιαστικά πρότυπα μπορεί να σας φανούν χρήσιμες. Στη δική μου εμπειρία όμως μετά από την εργασία μέσα σε λίγα έργα MVC σε κακάο έχει την τάση να έρθει πολύ φυσικά, δεν θα ήμουν πάρα πολύ ανησυχούν γι 'αυτό.

 

Τα έγγραφα μήλο πραγματικά να εξηγήσει MVC καλύτερα από οτιδήποτε άλλο έχω διαβάσει. Βασικά η σύγχυση που σχετίζονται με MVC είναι επειδή είναι μια ένωση πρότυπο. Αποτελείται από πολλά βασικά μοτίβα. Αν MVC δεν συζητήθηκε το *Σχέδιο μοτίβο* από την *συμμορία των τεσσάρων* , τα βασικά μοτίβα ήταν.



> 
> Η κύρια διαφορά πιστεύω είναι ότι στον κόσμο της Apple ο ελεγκτής είναι ένα πρότυπο μεσολαβητής εκτός από ό, τι κανονικά είναι. 
> 
> 
> Έτσι, σε αντίθεση με τα παραδοσιακά μοντέλα προσέγγισης στο κόσμο της Apple δεν κοινοποιεί τις απόψεις της αλλαγής. Δεν ενημερώσει κανέναν στην πραγματικότητα. Αν θέλετε να αλλάξετε ένα μοντέλο που πρέπει να το κάνουμε μέσα από τον ελεγκτή για να βεβαιωθείτε ότι ο καθένας έχει ενημερωθεί για τις αλλαγές.
> 
> 
> 


Νομίζω ότι αυτή η προσέγγιση είναι πολύ καλύτερη από ό, τι το παραδοσιακό. Θα πρέπει να θέσει κανένα περιορισμοί σχετικά με τα υποδείγματα αντικείμενα. Δεν χρειάζεται να υλοποιήσει κάθε συγκεκριμένο περιβάλλον. Το μόνο που πρέπει να λύσουν συγκεκριμένα προβλήματα του τομέα. Έτσι, μπορείτε πολύ εύκολα να χρησιμοποιηθούν και σε άλλες εφαρμογές.


Είναι κυρίως τα αντικείμενα ελέγχου που πρέπει να ξαναγραφεί σε αυτή την προσέγγιση. Φυσικά, η Apple άλλαξε ότι με δέστρες. Αλλά αν δεν θέλετε να χρησιμοποιήσετε τις συνδέσεις στη συνέχεια Ελεγκτές είναι συγκεκριμένη εφαρμογή.


Χρησιμοποιώντας την Apple MVC σε C ++
-------------------------------------


Εγώ πραγματικά ακολούθησε σχεδιασμού της Apple κατά τον προγραμματισμό εφαρμογών σε C ++ με χρήση Qt. Απόψεις είναι QWidget του. Έβαλα όλο τον κώδικα που έχει να κάνει με την εμφάνιση σε μια υποκατηγορία QWidget. Στη συνέχεια, κάνω ελεγκτή μου μια υποκατηγορία QObject και έχουν δημιουργήσει τα αντικείμενα θέα και συνδέστε τα σήματα από τα QWidgets με υποδοχές QObject ελεγκτή μου. μοντέλο μου τάξη είναι μια κανονική τάξη που δεν κληρονομούν τίποτα από το Qt και να εφαρμόσουν την επιχειρηματική λογική. Παίρνει τροποποιήθηκε από τις σχισμές ελεγκτές.


Εναλλακτικά, οι QWidgets μπορεί να δημιουργηθεί έξω από τον ελεγκτή, ώστε να μπορείτε να χρησιμοποιήσετε ξανά τον ελεγκτή για άλλους τύπους των απόψεων.


Δεν είμαι σίγουρος αν αυτό βοηθάει κανέναν, αλλά νομίζω ότι μερικές φορές είναι πιο εύκολο να σκεφτώ τα πρότυπα κακάο από την άποψη της C ++, επειδή έχουμε συνηθίσει να πάρει μοτίβο εξηγηθεί με όρους ενός στατικά δακτυλογραφημένη γλώσσα όπως η C ++ και Java.

 

Δεν νομίζω ότι το κακάο / OpenStep ποτέ πραγματικά ακολούθησε MVC, όπως είναι περιγράφεται, για παράδειγμα, [SmallTalk 80](http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html) . Ο ελεγκτής SmallTalk είναι πραγματικά κάτι το οποίο είναι αρμόδιο για την ερμηνεία της αλληλεπίδρασης του χρήστη με την προβολή, η οποία στην περίπτωση του κακάο γίνεται από NSControl και ως εκ τούτου, από την Προβολή στρώμα (ίσως είναι αποσυντίθεται με αυτόν τον τρόπο στο εσωτερικό του πλαισίου, αλλά δεν είμαστε υποτίθεται ότι κρυφοκοιτάξει μέσα? αυτό είναι η αφαίρεση είναι όλα σχετικά :-). Σε σχέση με αυτούς τους δεσμούς σου, το στρώμα ελεγκτή κακάο πραγματικά πτώση κάτω από τη σημαία του παρουσιαστή, ιδιαίτερα κατά την εξέταση των διαφόρων NS * κατηγορίες ελεγκτή από κακάο βιβλιοδεσίες. Αυτοί που πραγματικά είναι μια υπηρεσία μεταφοράς με λεωφορείο μεταξύ ενός στρώματος θέα και ένα μοντέλο.


Στη δική μου εφαρμογές που τείνουν να έχουν τέσσερις διαφορετικές στρώσεις, ακόμη και σε μέρη όπου δεν διαχωρίζονται σαφώς? η θέα, παρουσιαστής, των υπηρεσιών και το μοντέλο. Στη συνέχεια, οι «ελεγκτές παρουσιαστής» και οι «ελεγκτές υπηρεσία» έχουν εντελώς διαφορετικά σκοπούς? η λογική και οι διαδικασίες είναι στις υπηρεσίες, και οι ροής εργασιών και τη χρήση περιπτώσεις στις ελεγκτές άποψη. Από την άποψη της συσκευασίας, αν είστε σε αυτό το είδος του πράγματος, οι υπηρεσίες και το μοντέλο μαζί αντιπροσωπεύουν μια αφηρημένη «πράγματα να κάνουμε στην ουσία» που μπορεί να είναι το πλαίσιο-ανεξάρτητο. Οι παρουσιαστές και οι απόψεις αποτελούν το «και αυτό είναι το πώς ένας χρήστης μιας εφαρμογής Mac OS X θα ήθελε να το χρησιμοποιήσει» το οποίο εξαρτάται από το κάτω πακέτο και ενσωματώνει AppKit ειδικά (και AHIG ειδικά) μαθήματα και τη συμπεριφορά.

 

Ωχ. MVC = η πιο παραποιήσει μοτίβο ποτέ. Έχω διαβάσει τουλάχιστον 5 διαφορετικούς ορισμούς της.


Μπορεί να θέλετε να διαβάσετε αυτό το άρθρο από [τον Martin Fowler](http://martinfowler.com/eaaDev/uiArchs.html) 

 