C# 用于存储客户特定需求的设计模式

C# 用于存储客户特定需求的设计模式,c#,sql,wcf,design-patterns,sql-server-2012,C#,Sql,Wcf,Design Patterns,Sql Server 2012,tldr;正在寻找一种能够很好地处理客户对数据库领域的各种需求的设计模式 一直在寻找,没有遇到任何人与类似的问题,但如果我错过了一个请让我知道!此外,我怀疑我可能是把问题复杂化了,或者是试图一下子做太多。很抱歉收到了大量的文字 好的,我正在为一家我过去合作过的公司设计一个新的C#应用程序。我写这个应用程序是为了取代他们现在使用的VB6应用程序。这个新应用程序的范围将是初始信息收集阶段 该公司负责道路救援;有大型钻机卡车的公司的卡车发生故障。它们帮助数百个客户,每个客户都有自己的需求。公司为每一位

tldr;正在寻找一种能够很好地处理客户对数据库领域的各种需求的设计模式

一直在寻找,没有遇到任何人与类似的问题,但如果我错过了一个请让我知道!此外,我怀疑我可能是把问题复杂化了,或者是试图一下子做太多。很抱歉收到了大量的文字

好的,我正在为一家我过去合作过的公司设计一个新的C#应用程序。我写这个应用程序是为了取代他们现在使用的VB6应用程序。这个新应用程序的范围将是初始信息收集阶段

该公司负责道路救援;有大型钻机卡车的公司的卡车发生故障。它们帮助数百个客户,每个客户都有自己的需求。公司为每一位客户竭尽全力,因此我需要拿出一个可管理的设计来处理这些客户规格。所有以前开发的应用程序都有在线的“if-else”逻辑,可以满足数百个客户的需求,我对此仍有恶梦

例如:

用户将接听客户的电话并收集信息,然后将这些信息输入到该应用程序中。他们将打电话报告轮胎漏气等事件。有时打电话来的人是司机。其他时候,司机给他们工作的公司打电话,一名代表打电话报告事故并请求帮助。让我们把重点放在几条信息上,这样我就可以画出这幅画了

  • 客户参考号
  • 里程表
  • 列表项
  • 并非每个客户都需要参考编号。一些客户要求参考号与特定的掩码保持一致,例如“参考号必须以BD-XXX-XXXX-XX开头”或类似内容。其他客户甚至没有参考号,因此捕获这些数据没有意义(它不存在)

    有些客户需要里程计读数,有些客户不需要

    所以你可能开始看到我的问题了。客户A不需要参考号。客户B需要一个参考号。这并不像NOTNULL vs NULL那么简单,因为B还需要它们的引用号来匹配输入掩码

    要求类型:

    • 字段值必须大于/小于X
    • 字段必须与输入掩码保持一致
    • 完全没有收集字段
    • 所需字段
    • 字段可选
    • 字段值指示其他信息是否必须/不得 收集。如果一个特定字段为空,则需要另一个字段
    我希望将客户需求存储在数据库(SQL)中,并且可能能够加载一个包含这些数据的类,该类将能够处理应用程序UI部分的需求

    项目的组成部分必须: C#Windows应用程序 数据WCF服务(将在多个应用程序和web之间使用)
    SQL Server 2012

    首先,我认为这些不同的客户应该由相应的
    类来表示。如果客户引用不是公共属性,但它与特定类型的客户绑定,那么您需要使用继承

    在您的场景中,一种可能的良好设计模式是,如下所示:

    public interface ISpecification<T>
    {
          bool IsSatisfiedBy(T someObject);
    }
    
    公共接口规范
    {
    布尔满足于(T someObject);
    }
    
    我猜您将使用依赖项注入和一些反转控制容器框架,并且您将能够配置
    isspecification
    的许多实现。一旦您已经配置了它们,您应该能够通过
    T
    对它们进行过滤,其中
    T
    将是您的客户类


    也就是说,您将能够加载
    isspecification
    实现的子集,以检查某个客户实例是否满足一个或多个用于检查特定客户类型的给定规范。

    听起来您需要某种规则引擎来确定需要哪些字段以及是否存在任何输入验证(掩码)与给定客户端的该字段关联。根据复杂性的不同,这可能很容易在数据库中表示,将不同的字段和/或掩码绑定到客户机密钥。除了数据,是否还有不同的过程?@Tim-因此保留一个需求类型列表,将其绑定到字段,并将其分配给每个客户?@plalx-在后台会发生一些过程,这些过程会查看数据并发出通知,诸如此类,但不一定相关。这里我主要关注的是每次活动从客户那里收集的初始数据,并确保收集的数据是可接受的。谢谢!我曾考虑使用IoC来清理客户规范问题的事件数据,但我正在寻找一种避免创建数百个客户类的方法!我希望将代码放在适当的位置,当客户需求发生变化时不需要修改。希望仅仅更新SQL就足够了。我认为创建一个包含规范的类,并在客户基础上逐个加载需求信息,可能就可以做到这一点。我只要想出一个可行的设计。@Shockwave没问题!不客气。是的,你也可以走那条路。说到底,规范模式非常简单,但它可以变成一个非常强大的工具;)