Я знаю, что я отвечаю за это в коде, но в объектно-ориентированном и MVC смысле, кто действительно должен загружать модель. У меня есть модель для представления RSS-каналов, которые загружаются с URL-адреса. Модель действительно тонкая, и контроллер управляет загрузкой и разбором 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];
}
Загрузчик начинает загрузку и накопление данных ответа и передает их синтаксическому анализатору. Когда синтаксический анализатор завершен, он вызывает метод обратного вызова notify:(Feed *)feed в классе EntriesController, который обновляет свою модель.
Я не думаю, что на самом деле разделяю обязанности контроллера здесь, поэтому я думаю возложить всю эту ответственность на саму модель. Добавьте такие методы, как
// Feed.h
- (void)initWithContentsOfURL:(NSURL *)feedURL
- (void)initWithContentsOfDatabase:(sqlite *)database
который выполняет всю работу в самом классе модели. Хороший ли это подход и должна ли модель отвечать за выборку данных из различных источников данных?