我正在使用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);
});
}
是否有任何改善架构以进一步开发的建议?或任何材料,以了解大师通常如何做?
答案 0 :(得分:1)
一般来说,我构建这类事物的方式是:
ViewDidLoad
和ViewDidUnload
,以便在内存不足的情况下释放大部分内存IsViewLoaded
或事件中的可见性等,以确定是否需要处理事件您可以取消订阅Dispose
以获得良好衡量标准,但不需要。