存储配置信息(如存储过程名称)的良好格式
本文关键字:格式 信息 存储过程 存储配置 | 更新日期: 2023-09-27 18:24:18
在我们的应用程序数据层中,我们完全依赖存储过程和web服务进行数据交换。我们在页面加载中使用如下代码来执行存储过程
switch(requesttype)
{
case "GetEmployees":
switch (crud_type)
{
case "read":
Execute Stored Procedure 'A'
break;
}
break;
}
我们正在寻找将上述代码(在类文件中)删除到某种形式的配置文件中的方法
我们正在寻找能够快速检索(读取、解析等)和保存(写入、修改等)的文件存储格式
我们可以在它上面实现一个安全层
实现这一点不需要太多的麻烦和对现有代码的重大更改。
我觉得我超越了自己。你不能用配置来代替代码,因为代码会做一些事情,而配置只会告诉代码什么或如何做一些事情(除非配置本身包含代码,在这种情况下你会遇到悖论)。如果您想将可配置性应用于代码,首先需要使其更通用/通用(switch
语句表明它现在是而不是通用)。我这样做的方法在我最初的回答中有描述(如下)。它本身并不提供可配置性,但可以这样做(我做得相当简单)。代码是基于你原来的问题,所以请重新调整你的眼睛以正确阅读。
我过去选择的选项是使用工厂(无论是位于Singleton中,还是以IoC容器的形式传递给拥有代码样本的函数。
我的方法的非常高级的实现基本上是定义一个自定义属性,该属性包含一个属性,当您的类型有用时,该属性指示。类似于:
public class DbOperationAttribute : Attribute
{
public string Operation { get; set; }
}
以及一个公共接口,用于提供运行代码所需的API。类似于:
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
来存储您的配置。无论如何,它通常都会在那里;也可以将其用于您的目的。