【问题标题】:Good formats for storing configuration information like stored procedure names用于存储配置信息(如存储过程名称)的良好格式
【发布时间】:2012-02-14 05:51:02
【问题描述】:

在我们的应用程序数据层中,我们完全依赖存储过程和 Web 服务进行数据交换。我们在大量页面中使用如下代码来执行存储过程

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

我们正在寻找将上述代码(在类文件中)删除到某种形式的配置文件的方法

  1. 我们正在寻找检索(读取、解析等)和保存(写入、修改等)速度极快的文件存储格式

  2. 我们可以在它上面实现一个安全层

  3. 无需大惊小怪和对现有代码进行重大更改即可实现这一目标。

【问题讨论】:

  • 问题的措辞需要有所不同,很难说出您到底在寻找什么
  • @DanielPowell 现在是否适合 SO 问题格式??
  • 三列的 Sqlite 表可以完成这项工作吗? (RequestType,CrudType,StoredProcedureName)

标签: c# asp.net configuration .net-2.0 data-tier-applications


【解决方案1】:

我想我已经超越了自己。您不能用配置替换代码,因为代码会某事,而配置只会告诉代码做什么或如何做某事(除非配置本身包含代码,在这种情况下您有悖论)。如果您想将可配置性应用于您的代码,您首先需要使其更通用/通用(您的switch 语句表明它现在通用)。我的原始答案(如下)中描述了我这样做的方法。它本身不提供可配置性,但可以这样做(我做得很简单)。该代码基于您的原始问题,因此请重新调整眼睛以正确阅读。


我过去选择的选项是使用工厂(无论是安装在单例中还是以 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 来存储您的配置。无论如何,它通常会在那里;也可以将其用于您的目的。

【讨论】:

  • 已编辑以更直接地反映问题。
猜你喜欢
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多