iPhone-模型类内部的网络代码-代码设计问题
我有两个模型类,iPhone-模型类内部的网络代码-代码设计问题,iphone,model-view-controller,design-patterns,architecture,uiviewcontroller,Iphone,Model View Controller,Design Patterns,Architecture,Uiviewcontroller,我有两个模型类,User和Place 我需要获取用户附近的位置,即从服务器获取的数据。 用户具有currentLocation属性 由于Place类更适合使用类似于getNearByPlacesForLocation的方法,因此我考虑将其作为Place类中的静态方法 我想知道两件事: 这听起来像是正确的架构吗 将网络代码放在我的模型中(在本例中,放在getNearByPlacesForLocation)是正确的方法吗?或者我应该用像“网络经理”这样的单子?但在这种情况下,我的模型将无法重用,因为
User
和Place
我需要获取用户附近的位置,即从服务器获取的数据。
用户具有currentLocation属性
由于Place类更适合使用类似于getNearByPlacesForLocation
的方法,因此我考虑将其作为Place类中的静态方法
我想知道两件事:
getNearByPlacesForLocation
)是正确的方法吗?或者我应该用像“网络经理”这样的单子?但在这种情况下,我的模型将无法重用,因为它依赖于这个“NetworkManager”类。
你将如何解决它李>
经过一番思考,我得出了这个设计:
User.m
@implementation User
@synthesize currentLocation;
- (NSArray*) getNearbyPlaceForCurrentLocation
{
[Place getNearByPlacesForLocation:currentLocation];
}
@end
#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
Place.m
@implementation User
@synthesize currentLocation;
- (NSArray*) getNearbyPlaceForCurrentLocation
{
[Place getNearByPlacesForLocation:currentLocation];
}
@end
#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
#导入“Place.h”
#导入“NetworkServicesDataSource.h”
@实施地点
静态id_网络数据源;
+(void)setNetworkManager:(id)networkDataSource
{
_networkDataSource=networkDataSource;
}
+(NSArray*)靠近地点位置:(CLLOCATION Coordinated2D)loc
{
return[_networkdatasourcegetnearbyplacesforlocation:loc];
}
@结束
网络服务数据源.h
#import <Foundation/Foundation.h>
@protocol NetworkServicesDataSource <NSObject>
-(NSArray*) getNearByPlacesForLocation:(CLLocationCoordinate2D) loc;
@end
#导入
@协议网络服务数据源
-(NSArray*)靠近地点:(CLLOCATION Coordinated2D)loc;
@结束
这样我就可以进行某种依赖注入,而不依赖于Place类中的任何特定网络实现
我仍然很好奇,如果在每个模型类中都有这些方法是否比在UIViewControllers
中有一个“NetworkManager
”Singleton更好,他唯一的责任是从服务器获取我请求的数据,我可以在UIViewControllers
中引用这个“NetworkManager
”。
我想在我的
UIViewController
中与模型对象进行交互并询问它们的数据,但是我很乐意听取其他人的意见。是的,你说的很好。你的UI代码和控制器代码应该是分开的,这是cz如果你想把它放在其他应用程序中,或者如果你想制作另一个iPad/iphone版本的应用程序,同样的代码将被恢复。你只需要更改UI设置,如果你开发了一个网络管理器类,你可以很容易地将它放到任何其他应用程序中,你的代码变得更加独立和易于维护 是的,你说的很好。你的UI代码和控制器代码应该是分开的,这是cz如果你想把它放在其他应用程序中,或者如果你想制作另一个iPad/iphone版本的应用程序,同样的代码将被恢复。你只需要更改UI设置,如果你开发了一个网络管理器类,你可以很容易地将它放到任何其他应用程序中,你的代码变得更加独立和易于维护