我有一个代码段,我在其中调用数据库并以DataReader的形式返回数据。这基于参数是使用存储的proc来调用还是使用纯文本。像这样:
IDataReader dataReader = null;
if (commandType == CommandType.StoredProcedure)
{
dataReader = GetReaderByProc(proc, parameters);
}
else if (commandType == CommandType.Text)
{
dataReader = GetReaderByText(text);
}
其中commandType
是System.Data.CommandType
现在这绝对可以。但是我很好奇,在这样的代码场景中,有没有更好的方法来实现这一点。
我可以根据条件调用方法的更优雅或更佳方法吗?
答案 0 :(得分:0)
您可以使用<Switch>
<Router history={history} >
<div>
{
routes.map( (route, index) =>
<Route key={index} exact={route.exact} path={route.path} component={(props)=><route.component {...props} isAuthed={true} />}/>)
}
</div>
</Router>
</Switch>
来保存键(dictionary
)和其他commandType
的值,然后只需使用键获取Func<>
并执行它即可。 / p>
func
然后您可以像这样调用它:
public static Dictionary < string, Func<string, parameters, IDataReader> dbMethods =
new Dictionary<string, Func<string, parameters, IDataReader>();
public static void CreateMethodDictionary()
{
dbMethods.Add(CommandType.StoredProcedure, GetReaderByProc);
dbMethods.Add(CommandType.Text, GetReaderByText);
}
这确实假定您的两个调用函数都使用相同的参数(当前情况并非如此)并返回相同的对象。
尽管您的文本查询也应该使用参数,但查看代码也是如此,因为参数化查询应该是常态。