我有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
中詢問來自它們的數據更加乾淨和有條理,但我很樂意聽到其他人的意見。