РЕДАКТИРОВАТЬ: Моя конечная цель - полностью отделить ASIHTTPRequest
и ModelListingViewController
, чтобы я мог сделать self.modelArray = [Model arrayOfModelWithDelegate:self]
и, возможно, реализовать несколько моих собственных обратных вызовов, а не ASI.
IСоздано несколько приложений для iPhone, использующих сервис RESTful и ASIHTTPRequest.Я никогда не был доволен тем, как они спроектированы, так как я всегда чувствую, что классы контроллера синтаксического анализа, модели и представления тесно связаны.Для моего следующего обновления приложения я хотел бы использовать этот дизайн для доступа к веб-службе:
ModelListingViewController --- self ---> Model +(NSArray*)arrayOfModelWithDelegate:MLVC
+(NSArray*)arrayOfModelWithDelegate ---> ModelWSController:WSController +(NSArray*)getAllModel
в WSController
:
@property (nonatomic, strong) ASIHTTPRequest *request;
...
- (void)performRequest {
//global request stuff, like authentication, headers, etc
[request startAsynchronous];
}
в ModelWSController
:
- (NSArray *)getAllModelWithDelegate:(id)delegate {
request.url = @"Appropriate URL"; //or could use a more sophisticated internal url routing system defined by model class name
request.delegate = delegate;
[ModelWSController performRequest];
}
и в ModelListingViewController
:
self.arrayOfModel = [Model arrayOfModelWithDelegate:self];
Что-то не так с этим дизайном, особенно в том, как ModelWSController
и WSController
связаны, но яне знаю, что.В частности, передача delegate
два раза по цепочке кажется странной.
Вклад приветствуется, и я хотел бы знать, как вы разработали, используя принципы MVC для доступа к веб-сервису RESTful.Также, пожалуйста, дайте мне знать, если бы блоки были лучшим способом справиться с этим.