페이지

2010년 9월 30일 목요일

Model View Controller

 Smalltalk 에서 처음 소개되었던 Model View Controller(이하 MVC)패턴은 Cocoa frameworks의 전반적인 기반으로 사용된다.  모든 Object를 세가지 종류 중 하나로 분리하는 작업이 필요하다.
Model : Model은 어플리케이션의 단일한 능력이나 정보를 제공하는 객체이다.  View나 Controller와 의존성이 없어야 한다.
View : View는 Model과 합쳐진 정보를 나타내거나, 사용자와 상호작용을 하는데 사용된다. View는 웹기반이 될 수도, Command line기반이 될 수도, GUI가 될 수도 있다. 이러한 다양한 View는 같은 Model과 작용할 수 있어야 한다.
Controller : Controller의 목적은 Model과 View의 기능을 분리 시키는 데에 있다. View에서 사용자와의 상호작용의 결과를 이용해, Model의 정보를 변화시킨다.
 MVC의 기본적인 목적은 Model과 View, Controller의 기능을 분리시켜 각각의 변화가 생겨도 서로 간의 영향을 주지 않도록 하는데에 있다.

MVC in Cocoa
 Model은 Core Data가, View와 Controller는 Application Kit이 제공한다. Foundation framework은 위의 3 subsystems에서 사용되는 class를 제공한다. Model은 Cocoa framework외에 다른 subsystems에서도 사용될 수 있도록 구현되기도 한다. 하지만 Core Data frameworks는 강력하고 유연한 기능을 제공하므로, Cross-platform이 필요하지 않다면 Cocoa 기술을 이용해서 Model을 설계하는것이 유리하다.

Core Data / Model
 Model은 영구정보저장과, Object relationship management의 문제를 해결해야한다. Binary file 혹은 사람이 읽을 수 있는 Text file 등 여러 방법으로 저장할 수 있다. Core Data는 XML, binary flat files, SQLite database 3가지의 file format을 가지고 있다.
 Core Data는 3가지의 file format을 개발과정에서 자유롭게 바꾸거나 3가지 모두 동시에 지원가능하도록 해준다.
 대부분의 Model은 여러 objects간의 관계를 관리해준다. Core Data는 one to one, one to many 관계를 지원한다. 각 관계는 옵션이거나 필수일 수 있다. Core Data는 relationships, constraints, default values 를 개발자가 정의할 수 있도록 제공하고, relationship을 validate해준다.
 Apple의 Xcode tool의 Graphical object modeler를 이용하면, graphical하게 Model object를 정의할 수 있다.

Application Kit / View
 모든 Cocoa application은 OS와 연결을 유지하기 위해서 NSApplication의 Instance를 사용한다. NSApplication, NSView, NSWindow는 모두 NSResponder의 Subclasses다. NSResponder는 Responder Chain design pattern을 구현한다.
 NSView는 Hierarchies pattern을 구현한다. 모든 NSView는 Subviews를 가질 수 있다.
 Cocoa의 대부분의 UI Components는 NSControl의  Subclasses이다. NSControl은 Targets and Actions와 Responder Chain patterns의 중요한 역할을 한다.
 NSCell은 Flyweight pattern을 구현한다. Flyweight는 수행시간과 Memory소비를 최적화한다. NSControl의 Instances는 최적화와 유연성을 더하기 위해서 NSCell의 Subclasses를 사용한다.

Application Kit / Controller

댓글 없음:

댓글 쓰기