2

我有 2 个模型类UserPlace.

我需要获取用户附近的地方,我从我的服务器获取的数据。用户具有 currentLocation 的属性。

因为 Place 类感觉更适合有一个方法,就像getNearByPlacesForLocation我认为将它作为我的 Place 类中的静态方法一样。

我想知道两件事:

  1. 这听起来像正确的架构吗?
  2. 将网络代码放入我的模型中(在本例中为 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更加干净和结构化,但我很高兴听到其他人的意见。

4

1 回答 1

0

是的,你说的是完美。你的 UI 代码和控制器代码应该是分开的,如果你想把它放在其他应用程序中,或者如果你想制作另一个 iPad/iphone 版本的应用程序,你的相同代码将被重新使用。您只需要更改 UI 设置,如果您开发了一个网络管理器类,您可以轻松地将其放置到任何其他应用程序中,而且您的代码变得独立且非常易于维护。

于 2012-05-06T21:56:36.343 回答