2012-02-14 58 views
0

在我們的應用程序數據層中,我們完全依賴存儲過程和Web服務進行數據交換。我們的頁面,以執行存儲過程用於存儲配置信息(如存儲過程名稱)的良好格式

switch(requesttype) 
{  
    case "GetEmployees": 
     switch (crud_type) 
       { 
        case "read": 
          Execute Stored Procedure 'A' 
        break; 
       } 
    break;  
} 

我們正在尋找各種方法來去除上面的代碼(這是類文件內),以某種形式的配置文件的

  1. 負載使用類似的代碼下面我們正在尋找文件的存儲格式,是非常快速的檢索(讀取,分析等)和保存(寫,修改等)

  2. 我們可以實現它

  3. 之上的安全層210
  4. 實現這一點不用大驚小怪,對現有代碼進行重大更改。

+0

問題需要措辭有點不同,它有點難以分辨你正在尋找什麼 – 2012-02-14 05:56:20

+0

@DanielPowell它現在是否符合SO問題格式? – Deeptechtons 2012-02-14 06:01:37

+1

有三列的Sqlite表會做這項工作嗎? (RequestType,CrudType,StoredProcedureName) – 2012-02-14 06:19:43

回答

1

我覺得我超前了。你不能用配置來替換代碼,因爲代碼會做的事情,而配置只是告訴代碼什麼或怎麼做(除非配置本身包含代碼,在這種情況下你有一個悖論)。如果你想對你的代碼應用可配置性,你首先需要使它更通用/通用(你的switch聲明表明它現在是而不是一般)。我的原始答案描述了我的做法(下文)。它本身並不提供可配置性,但可以做到這一點(我相當簡單)。該代碼是基於你原來的問題,所以請重新調整你的眼睛正確閱讀。


我已經在過去選擇了選項是使用一個工廠(無論是一棟單身或傳遞給函數在IoC容器的形式擁有您的代碼示例。

我的方法的非常高的水平實現基本定義包含指示你的類型時非常有用的東西像一個屬性自定義屬性:

public class DbOperationAttribute : Attribute 
{ 
    public string Operation { get; set; } 
} 

的通用接口,提供API NE讓你的代碼運行。喜歡的東西:

public interface IDoSomethingSpecial 
{ 
    bool Execute(SomeExecutionContext context); 
} 

然後你裝飾特定的類與屬性,並實現該接口,以表明它們適合於每一個動作:

[DbOperation(Operation = "Read")] 
public class DBReadOperation : IDoSomethingUseful 
{ 
    // Our implementation of the `IDoSomethingUseful` interface 
    public bool Execute(SomeExecutionContext context) 
    { 
     // Do something useful in here 
    } 
} 

在你的程序有些時候你會需要能夠發現哪些類型適合哪些操作。我用反射來做這件事,儘管它可以很容易地通過配置來完成(這會破壞屬性點)。幾個IoC容器提供了類似的可發現性屬性,儘管使用其他人的方式(通常情況下)您將繼續按照自己的方式進行操作。

一旦你發現了哪些類型適合哪些操作,您可以使用類似:

IDoSomethingUseful someAction = myCollectionOfUsefulThings(requesttype); 
someAction.Execute(someInstanceOfOurContextType); 

在此基礎上設計我的偏向只是用App.Config/Web.Config存儲配置。無論如何,它通常會在那裏;不妨將它用於你的目的。

+0

被編輯爲更直接反映問題。 – 2012-02-14 06:24:49