我知道我在代码中负责这一点,但是在面向对象和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];
}
的下载开始下载和积累的响应数据,并将其传递给解析器。解析器完成后,它会在EntriesController类中调用回调方法notify:(Feed *)feed
,该类将更新其模型。
我不认为我真的在这里解耦控制器的责任,所以我正在考虑将所有这些责任放在模型本身。添加方法如
// Feed.h
- (void)initWithContentsOfURL:(NSURL *)feedURL
- (void)initWithContentsOfDatabase:(sqlite *)database
它完成模型类本身的所有工作。 这是一个好方法吗?模型应该负责从各种数据源获取数据吗?
EntriesController确实是一个视图控制器,一个表视图控制器。如果这个模型有多个视图,模型初始化代码将被复制到任何地方。此外,如果没有视图控制器,模型将不可用。感谢罗布,我现在看到了我设计中的巨大缺陷。 – Anurag 2009-09-25 00:44:16