1
我們有一個工具可以爲Oracle數據庫中的存儲過程生成映射代碼。 我會盡量把它解釋得儘可能抽象,沒有任何噪音,因此一切都被大大簡化了。適配器模式的使用,如果它是正確的
比方說,這是我們生成的代碼的一部分:
public interface IDbMethodCaller
{
IEnumerable<object> ExecuteMethodCall(string methodName, IEnumerable<string> parameters);
}
public class GeneratedSchemaContext
{
private readonly IDbMethodCaller _dbMethodCaller;
public GeneratedSchemaContext(IDbMethodCaller dbMethodCaller)
{
_dbMethodCaller = dbMethodCaller;
}
public IEnumerable<object> ExecuteSampleProcedure()
{
return _dbMethodCaller.ExecuteMethodCall("sample_procedure", new List<string>());
}
}
我們normaly有我們使用的數據訪問的目的,一個標準類:
public class OracleDataContext
{
public IEnumerable<object> ExecuteMethodCall(string methodName, IEnumerable<string> parameters)
{
Debug.WriteLine("OracleDataContext.ExecuteMethodCall");
return new List<object>();
}
}
現在我想用上述DataContext爲GeneratedSchemaContext
。那麼,我該如何做到這一點?該類本身無法實現IDbMethodCaller,因爲在其他項目中它不知道接口(生成的代碼的一部分)。
我想到了適配器模式,改變了一點點:
public class OracleDataContextAdapter : OracleDataContext, IDbMethodCaller
{
public new IEnumerable<object> ExecuteMethodCall(string methodName, IEnumerable<string> parameters)
{
Debug.WriteLine("OracleDataContextAdapter.ExecuteMethodCall");
return base.ExecuteMethodCall(methodName, parameters);
}
}
所以,現在我可以做到以下幾點:
var db = new GeneratedSchemaContext(new OracleDataContextAdapter());
var result = db.ExecuteSampleProcedure();
- 是否有實現這一目標更優雅的方式任務?您如何看待解決方案?
- 這仍然是適配器模式還是我誤解了它?
DIP!是的,我沒有看到。謝謝。你能說一些關於Adapter模式的東西嗎?這是一種適應性,我可以這樣稱呼班級嗎?用「適配器」後綴? – timmkrause