我最近在應用程序中偶然發現了以下內容,我很想知道這是好還是不好的做法。我看到的是在應用程序,業務邏輯和最終我們的框架中的不同級別上訂閱的事件。活動訂閱最佳實踐
我們的功能驗證和授權的用戶,這是一個HttpModule基本上做如下策劃(我只包含最相關的部分):
public class FooModule : IHttpModule
{
private IIdentityProvider _identityProvider;
public void Init(HttpApplication context)
{
_identityProvider = TypeFactory.Create<IIdentityProvider>("...type string from configuration...");
identityProvider.Init(context, ...);
context.PostAuthenticateRequest += OnAuthenticateRequest;
context.PostAuthenticateRequest += OnAuthenticateRequestLogging;
}
...
}
到目前爲止,一切都好:HTTP模塊識別配置的身份提供者將其初始化並訂閱一些事件。事件處理程序在這裏沒有問題,所以我省略了它們。
然後,在任意的身份提供者的初始化:
public class BarIdentityProvider : IIdentityProvider
{
public void Init(HttpApplication httpApplication, ...)
{
var authorizer = new BarAuthorizationProvider();
authorizer.Init(httpApplication, ...);
httpApplication.PostAuthenticateRequest += httpApplication_PostAuthenticateRequest;
httpApplication.AuthorizeRequest += httpApplication_AuthorizeRequest;
}
...
}
而且在AuthorizationRequestHandler會發生以下情況:
public class BarAuthorizationProvider
{
public void Init(HttpApplication httpApplication, ...)
{
httpApplication.PostAuthorizeRequest += OnAuthorizeRequest;
}
...
}
正如你所看到的,有被訂閱了FooModule事件,BarIdentityProvider和BarAuthorizationProvider,對我來說,它是作爲意大利麪條發生的。此外,這樣做的時候:
var authorizer = new BarAuthorizationProvider();
authorizer.Init(httpApplication, ...);
我不指望authorizer
訂閱各種活動和工作「神奇」。
作爲一個軟件開發我期待之一:
- 一個的HttpModule訂用必要的事件,並要求對身份和訪問信息的身份提供商和授權商。提供者中的事件處理被最小化。
- 多個HttpModules(即認證和授權模塊),每個HttpModules訂閱必要的事件。提供者中的事件處理被最小化。
我正確嗎?還是有反對我的期望的論據?