views:

65

answers:

2

I have a RESTful server and need to create the client in a Cocoa app.

I have a model called Resource. When I GET /resources, my server returns all resources in JSON.

I have a model called Client that owns many resources.

The Client has an instance method -(NSMutableArray*)resources

An NSArrayController manages the resources. The first time the above method is called, it asks the REST server for the client's resources.

My question is this: who should create the request, dispatch the request, and populate the array: the Client class or the Resource class (with something like -(NSMutableArray*)resourcesForClient:(Client*)client )? Or maybe neither, instead there being an API class that receives the model name and some filters and returns the array?

A: 

Unless there is a good reason a resource should know about clients, or speak with servers, it is probably a good idea to keep its responsibility minimized. The client has a collection of resources, so it is ok for it to know what a resource is, and manage the requests and management of resources.

Tim Rupe
@Time Rupe: just to make sure - did you read Clients as customers? That was my intention.
Alexandre
A: 

I would go with neither if both Client and Resource are part of the business model. Presumably a "Client" in this instance is a customer not a client in technical client-server speak.

Edit:

Your business model should be all about the rules and objects associated with the business. I would class the problem of getting the objects from a particular backing store as not part of the business model in much the same way as I would class getting the objects from a user as not part of the business model.

Therefore your "get from the server" API should be separate.

JeremyP
Correct, a client is a customer. Sorry for the mix-up. What would you recommend?
Alexandre