我有 2 个模型类User
和Place
.
我需要获取用户附近的地方,我从我的服务器获取的数据。用户具有 currentLocation 的属性。
因为 Place 类感觉更适合有一个方法,就像getNearByPlacesForLocation
我认为将它作为我的 Place 类中的静态方法一样。
我想知道两件事:
- 这听起来像正确的架构吗?
- 将网络代码放入我的模型中(在本例中为 inside
getNearByPlacesForLocation
)是正确的方法吗?或者我应该使用一些像 'NetworkManager' 这样的单例?但同样在这种情况下,我的模型将无法重用,因为它依赖于这个“NetworkManager”类。你会怎么解决?
经过一番思考,我得到了这个设计: User.m
@implementation User
@synthesize currentLocation;
- (NSArray*) getNearbyPlaceForCurrentLocation
{
[Place getNearByPlacesForLocation:currentLocation];
}
@end
地点.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
网络服务数据源.h
#import <Foundation/Foundation.h>
@protocol NetworkServicesDataSource <NSObject>
-(NSArray*) getNearByPlacesForLocation:(CLLocationCoordinate2D) loc;
@end
这样我就可以进行某种依赖注入,而不依赖于我的 Place 类中的任何特定网络实现。
我仍然很好奇,但如果在每个模型类中都有这些方法比拥有一个NetworkManager
单一职责是从服务器获取我请求的数据,我可以NetworkManager
在我的UIViewControllers
. 我觉得在我的内部与模型对象进行交互并从它们那里询问数据UIViewController
更加干净和结构化,但我很高兴听到其他人的意见。