0
首先處理我會解釋我的項目的結構:異常與企業庫5.0
我有一個WCF服務
public class MyService : IMyService
{
private QueryHandler _queryHandler;
public MyService()
{
_queryHandler = new QueryHandler();
}
public MyObject GetMyObject(string param1, string param2)
{
return _queryHandler.GetMyObject(param1, param2);
}
}
的QueryHandler級是在不同的項目,是地方我在哪裏查詢我的數據庫。
我有點困惑哪種方法有關異常處理應用程序塊採取: 不要我把一個try ... catch圍繞在queryhandler每一個數據訪問代碼並執行異常處理,如:
try
{
//Do something
}
catch (Exception ex)
{
ExceptionManager exManager = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>();
Exception exceptionToThrow;
bool rethrow = exManager.HandleException(ex, "Exceptions Policy", out exceptionToThrow);
if (rethrow)
{
if (exceptionToThrow == null)
{
throw;
}
else
{
throw exceptionToThrow;
}
}
return null;
}
還是我把它放在我的web服務類,如:
public MyObject GetMyObject(string param1, string param2)
{
var exceptionManager = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>();
return exceptionManager.Process(() => _queryHandler.GetMyObject(param1, param2), "Exceptions Policy");
}
這將是我下一步;-)但是,如果我理解正確,使用ExceptionShielding的時候,我不需要使用任何嘗試...再抓?還是我仍然必須把它們放在我的QueryHandler類中? – Koen 2011-05-02 12:59:27
使用該屬性時,您不必擔心代碼中的任何「try {} catch {}」塊,因爲屏蔽策略應爲您處理這些問題。如果你可以從異常中恢復,你可能仍然需要在'QueryHandler'中嘗試{} catch {}'塊,但是如果所有的策略都是'rethrow',我將把處理保留爲屏蔽屬性。 – 2011-05-02 13:17:52
非常感謝。仍然需要做一些關於屏蔽的閱讀,但這是一個很大的幫助。 – Koen 2011-05-02 14:10:42