C# と MonoTouch を使用して Web サービス用のクライアント アプリを作成しています。ユーザー セッション (登録、ログイン、ログアウト)、メッセージング (リスト、書き込み、削除など)、イメージ ルーチン (アップロード、ダウンロード) などのコマンドがいくつかあります。
次のように、非同期で実行できるユーザー セッション リクエスト タイプの実装を作成しました。
{
public delegate void LoginEventHandler(Session session);
public delegate void ErrorEventHandler(Error error);
public delegate void StatusEventHandler(string status);
public interface IDataProvider
{
#region Session
Session GetSession();
event LoginEventHandler OnRegistered;
event ErrorEventHandler OnRegisteredError;
void Register(Person user);
event LoginEventHandler OnLoggedIn;
event ErrorEventHandler OnLoggedInError;
void Login(Person user);
event StatusEventHandler OnLoggedOut;
event ErrorEventHandler OnLoggedOutError;
void Logout(Session session);
#endregion
}
}
}
それは機能しますが、今でも2つのイベントハンドラーを実装して、後でリクエストに対してサブスクライブを解除するのは少し退屈で弱いです:
dataProvider = new DataProviderService ();
...
appDelegate.dataProvider.OnRegistered += HandleOnRegistered;
appDelegate.dataProvider.OnRegisteredError += HandleOnRegisteredError;
appDelegate.dataProvider.Register(GetPerson());
...
void HandleOnRegistered (Session session)
{
InvokeOnMainThread(delegate {
appDelegate.settings.Session = session;
appDelegate.dataProvider.OnRegistered -= HandleOnRegistered;
appDelegate.dataProvider.OnRegisteredError -= HandleOnRegisteredError;
Waiter.HideWaiter();
Console.WriteLine(session.userId);
}
);
}
void HandleOnRegisteredError (Error error)
{
InvokeOnMainThread(delegate {
appDelegate.dataProvider.OnRegistered -= HandleOnRegistered;
appDelegate.dataProvider.OnRegisteredError -= HandleOnRegisteredError;
Console.WriteLine(error);
});
}
さらなる開発のためにアーキテクチャを改善するための提案はありますか? または、教祖が通常どのように行うかを確認するための資料はありますか?