2014-12-27 36 views
0

我有一個代理HttpHandler,它可以從用戶那裏獲取一個url作爲查詢字符串參數,如下所示。我的代理的哪種設計模式規則

public class MagicProxy : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     string requestUrl = HttpUtility.UrlDecode(context.Request.QueryString["url"]); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

URL參數是這樣的:

http://server1.com/service?method=get&request=GetInfo 
http://server1.com/service?method=get&request=GetFeatures 
http://server1.com/service?method=get&request=GetImage&Format=PNG 

我解析URL查詢字符串。因爲有些用戶可以使用method=get並且不能使用method=post。某些用戶可以使用 request=GetInfo,有些用戶不能使用reguest = GetImage。

這些是我的用戶規則。我想使用設計模式來實現這些規則。但我不能決定使用。 規範,策略或其他。我是設計新手。

public interface IRule{} 
public class UserCanUseGetMethod:IRule{} 

如何組合規則和用戶?

回答

1

Specification應該是一個很好的選擇:

if(someSpec.IsSatisfiedBy(request)) 
{ 

} 

在哪裏request可以是HTTP請求原樣或者您可以設計爲具有所需性質的值的對象的任意的類。

好像你的界面看起來是這樣的:

public interface ISpecification<T> 
{ 
    bool IsSatisfiedBy(T some); 
} 

這將允許你到處使用這個模式,因爲它支持T泛型類型參數提供對象的類型來指定,它似乎你可以在需要規格的其他情況下重新使用!