簡體   English   中英

更好的網絡服務客戶端

[英]Better client side of web-service

我正在使用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);
    });
}    

有什么建議可以改進體系結構以進行進一步開發嗎? 還是有任何資料可以了解上師的日常工作?

通常,我設計此類事物的方式:

  • 延遲加載我的控制器
  • 每個控制器在應用程序內都是一個單例,並且在應用程序的整個生命周期內都存在(我使用IoC容器,但您不必這樣做)
  • 也將您的WCF服務(或頻道)設置為單例
  • 在每個控制器的構造函數中訂閱此類事件
  • 適當處理ViewDidLoadViewDidUnload以便可以在內存不足的情況下釋放大多數內存
  • 檢查IsViewLoaded或事件中的可見性等,以確定是否需要處理事件

您可以取消Dispose訂閱以取得良好的效果,但這不是必需的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM