我有2个模型类,User
和Place
。iPhone - 模型类内部网络代码 - 代码设计问题
我需要获取用户的附近地点,我从服务器获得的数据。 用户拥有currentLocation的属性。
由于Place类感觉像getNearByPlacesForLocation
这样的方法更合适,所以我认为它是我的Place类中的静态方法。
我想了解一下两件事情:
- 这听起来是一个正确的架构?
- 在我的模型中放置网络代码(在本例中,在
getNearByPlacesForLocation
之内)是否正确?或者我应该使用像'NetworkManager'这样的一些singelton?但是在这种情况下,我的模型不能重用,因为它取决于这个'NetworkManager'类。 你会如何解决它?
经过一番思考练到这样的设计: User.m
@implementation User
@synthesize currentLocation;
- (NSArray*) getNearbyPlaceForCurrentLocation
{
[Place getNearByPlacesForLocation:currentLocation];
}
@end
Place.m
#import "Place.h"
#import "NetworkServicesDataSource.h"
@implementation Place
static id<NetworkServicesDataSource> _networkDataSource;
+(void) setNetworkManager:(id<NetworkServicesDataSource>)networkDataSource
{
_networkDataSource = networkDataSource;
}
+(NSArray*) getNearByPlacesForLocation:(CLLocationCoordinate2D) loc
{
return [_networkDataSource getNearByPlacesForLocation:loc];
}
@end
NetworkServicesDataSource.h
这样我就可以做一些依赖注入,并不依赖于我的Place类中的任何特定的网络实现。
我还是很好奇,但是如果在每个模型类中使用这些方法比'NetworkManager
'更好,singelton的单一职责是向我提供我从服务器请求的数据,我可以在其中引用' NetworkManager
'在我的UIViewControllers
里面。 我觉得自己喜欢与模型对象进行交互,并且在我的UIViewController
中询问来自它们的数据更加干净和有条理,但我很乐意听到其他人的意见。