2012-07-13 36 views
0

我正在編寫使用C#和MonoTouch的網絡服務的客戶端應用程序。它有一些用戶會話(註冊,登錄,註銷),消息(列表,寫入,刪除等),圖像例程(上傳,下載)等命令。更好的客戶端的網絡服務

我寫的實施給用戶會話請求類型,它可以異步執行,這樣的:

{ 
    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); 
    }); 
}  

任何有關改進體系結構以進一步開發的建議嗎?或者有什麼材料可以看出古茹通常如何做?

回答

1

一般的路上我建築師這樣的事情:

  • 延遲加載我控制器
  • 每個控制器是應用程序中獨立的,並在應用程序中的生活(我使用IoC容器保持,但你不必)
  • 讓您的WCF服務(或頻道)作爲單以及
  • 訂閱像這樣的事件在每個控制器
  • 手柄的構造和ViewDidUnload適當地使大部分內存可以在低內存conditiions被釋放
  • 檢查IsViewLoaded或可見性事件等,以確定是否需要處理該事件

你可以在Dispose取消爲好測量,但它不是必需的。

+0

如果我理解你是正確的,通常你使用的是相同的東西,但額外檢查雙重簽名事件處理程序。 – 2012-07-16 10:41:12

+0

如果你的控制器真的是單身人士,那麼檢查你是否訂閱了兩次事件是沒有用的。 – jonathanpeppers 2012-07-18 21:48:38

相關問題