私は2つのモデルクラスを持っていUser
ますPlace
.
ユーザーの近くの場所、サーバーから取得したデータを取得する必要があります。ユーザーには currentLocation のプロパティがあります。
getNearByPlacesForLocation
Place クラスは、Place クラス内の静的メソッドとして考えていたようなメソッドを持つ方が適切だと感じているためです。
私は2つのことについて疑問に思っています:
- これは正しいアーキテクチャのように聞こえますか?
- モデル内 (この例では 内
getNearByPlacesForLocation
) にネットワーク コードを配置することは正しい方法ですか? または、おそらく「NetworkManager」のようなシングルトンを使用する必要がありますか? しかし、その場合も、この「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
#import <Foundation/Foundation.h>
@protocol NetworkServicesDataSource <NSObject>
-(NSArray*) getNearByPlacesForLocation:(CLLocationCoordinate2D) loc;
@end
そうすれば、ある種の依存性注入を行うことができ、Place クラス内の特定のネットワーク実装に依存しなくなります。
私はまだ興味がありますが、各モデル クラス内にこれらのメソッドを配置する方がNetworkManager
、サーバーから要求したデータを ' ' 取得する単一の責任を持つシンゲルトンを配置NetworkManager
するよりも優れているかどうかはまだ興味がありますUIViewControllers
。モデルオブジェクトと対話し、それらからデータを取得することは、よりクリーンで構造化されているように感じますが、UIViewController
他の人の意見を聞いてうれしいです.