我知道我在代码中对此负责,但在面向对象和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
它完成了模型类本身的所有工作。 这是一个很好的方法,模型是否应该负责从各种数据源获取数据?
答案 0 :(得分:1)
这里的“EntriesController”是视图控制器还是模型控制器?如果它是一个视图控制器,我建议将逻辑推入Model类。视图控制器的真正工作是管理视图并与模型协调;不要真正控制模型。
如果它真的是一个模型控制器(即它没有UI元素),那么根据我的经验,拥有一个你编写的控制器和模型类是不同寻常的。通常,所有控制器逻辑都可以放入模型中,控制器只是一个不需要的层。
一般来说,我的经验是,在MVC世界中,你倾向于写两个,Apple(或XIB)提供另一个。如果你自己写这三个,你可能涉及太多层。