は、私は2つのモデルクラス、User
とPlace
を持っています。iPhone - モデルクラス内部のネットワークコード - コード設計上の問題
私は自分のサーバーから取得したユーザーの近くの場所を取得する必要があります。 ユーザーはcurrentLocationのプロパティを持っています。
PlaceクラスはgetNearByPlacesForLocation
のようなメソッドを持つ方が適切だと感じましたので、私は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
私は何らかの依存性注入を行うことができ、Placeクラス内の特定のネットワーキング実装に依存しません。
私はまだ興味がありますが、それぞれのモデルクラス内にこれらのメソッドを持たせることは、単なる責任である 'NetworkManager
'シングルトンを持っているよりも、私がサーバーから要求するデータを取得することよりも優れています。 「UIViewControllers
」内に「NetworkManager
」と表示されます。 UIViewController
のモデルオブジェクトとやりとりして、そこからデータを聞くのがよりクリーンで構造化されているように感じますが、他の人の意見を聞いてうれしいです。