1

私は、アプリに付属のコレクションからランダムに選択されたユーザー俳句を表示し、そのコレクションを追加するために俳句を書くことができるアプリに取り組んでいる初心者です。また、ユーザーは、俳句の本を購入できるページのWebビューに移動します。重要なのは、ほとんどすべてのメソッドをView Controllerに配置したことです。そして、優れたMVC作業では、これを別の方法で分割できると感じています。これが私の基本的なメソッドです(簡潔にするために、他のメソッドのサブメソッドであるいくつかをマージし、FoundationメソッドとUIKitメソッドもいくつか省略しました)。簡単な説明があります。

GHHaiku.m //This is a model class, or at least I think it is.

-(int)chooseNumber {
returns a random number 
}

-(NSString *)haikuToShow {
uses that number to return haiku from collection
}

GHViewController.m

-(void) viewDidLoad
-(void) viewDidUnload

-(void) clearScreen {
gets rid of all UITextFields and images so that a new set of them can be created, perhaps with different parameters.
}

-(void) saveData {
saves persistent information like whether user has read the instructions
}

-(void)home {
takes user “home” from whatever screen we're in and shows next haiku
}

//--code to set up navBar and Toolbar

-(void)createNavBar:title {
creates and adds buttons to a UINavigationItem with “title” as title and adds UINavigationBar to view
}

-(void) loadToolbar {
loads toolbar at bottom of screen and adds buttons
}

//--code for instructions page

-(void) haikuInstructions {
shows instructions on screen
}

//--code for Amazon page

-(void) loadAmazon {
loads webview of haiku page at amazon.com
}

-(void) webViewDidFinishLoad:(UIWebView)
-(BOOL) webview:(UIWebView) shouldStartLoadWithRequest:(NSURLRequest) navigationType:(UIWebViewNavigationType)
-(void) connectWithURL☹NSString) andBaseURLString: (NSString)
-(BOOL) connection: (NSURLConnection) didFailWithError: (NSError)

-(void) doneWithAmazon {
takes user out of webview Amazon and shows next haiku
}

//--code for compose page

-(void) createSpaceToWrite {
sets up and shows an editable UITextView
}

-(void) userWritesHaiku {
allows user to write haiku
}

-(void) userEditsHaiku {
takes user to edit screen for haiku s/he’s already written.

-(void) userFinishedWritingHaiku {
shows action sheet once user’s done
}

-(void) deleteHaiku {
allows user to delete haiku s/he’s written
}

-(void) saveUserHaiku {
saves user haiku to documents folder
}

-(void) takeToOptOut {
allows user to opt out of sending haiku to central database
}

//--code for sharing

-(void) createImage {
creates image of haiku
}

-(void) showActionSheet {
gives user options to tweet, faceBook, or email
}

-(void) share {
allows user to tweet, email, or facebook that image
}

//--code for display page

-(IBAction)chooseDatabase: (UISegmentedControl) {
allows user to choose whether to see his/her own haiku and/or haiku that come with the application
}

-(void) fadeView {
fades the UISegmentedControl for chooseDatabase
}

-(void) nextHaiku {
shows next haiku
}

-(void) previousHaiku {
shows previous haiku
}

それらのいくつかは別々のクラスに属していると想像する必要がありますが、GHViewControllerに何をどこに何を保持するかがわかりません。(「ビューコントローラー」には「ビュー」と「コントローラー」の両方が含まれていて、それがビューなのかコントローラーなのか、どちらでもないのかわからないため、混乱の一部が生じていると思います。...)

とにかく、私が作成すべき他のクラスと、それらにどのメソッドを入れるべきかについての提案が欲しいです。

4

1 に答える 1

1

これらのメソッドのほとんどは、ビューコントローラ(何かが「表示」されているもの、またはビューで何かを実行しているもの)に適しています。ただし、haikusを管理するためのロジックを抽出することもできます... saveUserHaiku:やdeleteHaiku:メソッドのように、少なくともモデルを呼び出す必要があります。次に、モデルは通知を投稿するか、デリゲートにコールバックして変更されたデータを通知します...ビューコントローラーはそのデリゲートまたはオブザーバーであり、削除された俳句、または目に見える変更がある場合は保存された俳句に適切に応答します。

nextHaikuメソッドとpreviousHaikuメソッドはViewControllerで意味がありますが、実際にデータを取得するには、モデルオブジェクトを呼び出す必要があります。

モデルは使用しているデータベースを追跡する必要があるため、ユーザーがデータベースを選択できるようにするコードはView Controllerにありますが、使用可能なデータベースと選択されたデータベースはモデルから取得されます。

また、物事を共有するためのコードも分割できます。視覚的な要素とコントロールを表示するコードはViewControllerにある必要がありますが、データをパッケージ化して適切な場所に送信する方法を知っている共有ユーティリティオブジェクトがある場合があります。

于 2012-10-05T19:12:47.417 に答える