谁负责从远程源初始化模型

时间:2009-09-24 21:33:04

标签: iphone model-view-controller design-patterns model

我知道我在代码中对此负责,但在面向对象和MVC意义上,谁应该真正加载模型。我有一个模型来表示从URL加载的RSS提要。该模型非常精简,控制器管理XML的下载和解析,然后将其传递给模型。这样做更好还是让模型负责初始化自己?

管理检索订阅源的控制器中的代码如下所示:

// EntriesController.m
- (void)getFeedsFromWeb {
    Parser *parser = [[Parser alloc] init];
    [parser addListener:self];
    Downloader *downloader = [[Downloader alloc] initWithParser:parser];
    [downloader getFeed:@"http://www.example.com/rss"];
    [parser release];
}

- (void)notify:(Feed *)aFeed {
    self.feed = aFeed;
    [self updateView];
}

Downloader开始下载并累积响应数据,并将其传递给Parser。解析器完成后,它会在EntriesController类中调用一个回调方法notify:(Feed *)feed,它会更新它的模型。

我不认为我在这里真正脱离了Controller中的责任,所以我想把所有这些责任都放在模型本身中。添加

等方法
// Feed.h
- (void)initWithContentsOfURL:(NSURL *)feedURL
- (void)initWithContentsOfDatabase:(sqlite *)database

它完成了模型类本身的所有工作。 这是一个很好的方法,模型是否应该负责从各种数据源获取数据?

1 个答案:

答案 0 :(得分:1)

这里的“EntriesController”是视图控制器还是模型控制器?如果它是一个视图控制器,我建议将逻辑推入Model类。视图控制器的真正工作是管理视图并与模型协调;不要真正控制模型。

如果它真的是一个模型控制器(即它没有UI元素),那么根据我的经验,拥有一个你编写的控制器和模型类是不同寻常的。通常,所有控制器逻辑都可以放入模型中,控制器只是一个不需要的层。

一般来说,我的经验是,在MVC世界中,你倾向于写两个,Apple(或XIB)提供另一个。如果你自己写这三个,你可能涉及太多层。