モデル コントローラーとして使用している Web サービスへの API 呼び出し用に、いくつかのモデル クラスとラッパー クラスを備えた iOS アプリケーションがあります。
以下は、単純な Model オブジェクトの例です。
@interface Person : NSObject
@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;
+ (Person *)personWithFirstName:(NSString *)firstName lastName:(NSString *)lastName;
@end
このオブジェクトを Web サービスから取得するために、次のメソッドを実装したモデル コントローラーがあります。
- (NSArray *)allPeople;
- (void)addPerson:(Person *)newPerson;
- (void)deletePerson:(Person *)newPerson;
これは現時点では素晴らしいことです。ただし、モデルコントローラーにラップしたい編集機能を追加していますが、これを構成する最良の方法については不明です。明らかに、Person オブジェクトを更新する最も簡単な方法は、オブジェクトのプロパティに直接アクセスすることです。しかし、現時点では、モデル オブジェクトは Web サービスについて何も認識していないため、そのままにしておきたいと考えています。次のようなメソッドをモデルコントローラーに追加できます
- (void)updatePerson:(Person *)person withFirstName:(NSString *)newFirstName
または似たようなもので、Person オブジェクトのプロパティを読み取り専用にしますが、これはあまり直感的ではないようです。それでも、コントローラー コードをモデル クラスに追加せずにこれを行う方法は他に考えられません。これは、この状況を処理する適切な方法のように思えますか? 他の選択肢はありますか?
更新 上記で何を考えていたのかわかりませんが、モデルコントローラークラスが何らかの方法でこれらのプロパティにアクセスして更新する必要があるため、モデルオブジェクトのプロパティを読み取り専用にすることはできません。これは、面倒な api ラッパーをバイパスして person オブジェクトを直接更新できることを意味します。何か助けはありますか?