tldr;寻找一种擅长处理客户对数据库字段的各种要求的设计模式。
一直在寻找并且没有遇到过类似问题的人,但如果我错过了一个,请告诉我!此外,我怀疑我可能要么过于复杂化问题,要么试图一次做太多。对不起来的文字墙。
好的,所以我正在为一家我过去合作过的公司设计一个新的C#应用程序。我正在编写这个应用程序来替换他们现在拥有的VB6应用程序。这个新应用程序的范围将用于初始信息收集阶段。
该公司是为路边援助;卡车为拥有大型钻井平台卡车的公司而破产。他们为数百名客户提供帮助,每个客户都有自己的要求。公司为每个客户弯腰倒退,因此我需要提出一个可管理的设计来处理这些客户的规格。以前开发的所有应用程序都具有内联功能,如果没有其他应用程序。几百个客户的逻辑,我仍然有噩梦。
示例:
用户将接听客户的电话并收集他们输入此应用程序的信息。他们将要求举报轮胎爆胎等事件。有时候打电话的人是司机。其他时候司机打电话给他们工作的公司,一位代表打电话报告事件并请求帮助。让我们关注一些信息,以便我可以画出图片。
并非每个客户都需要参考编号。有些客户要求参考编号遵守某个掩码,例如"参考编号必须以BD-XXX-XXXX-XX"或类似的东西。其他客户甚至没有参考编号,因此没有必要捕获这些数据(它不存在)。
有些客户要求里程表读取里程数,有些则不需要。
所以你可能会开始看到我的问题。客户A不需要参考编号。客户B需要参考编号。它不像NOT NULL vs NULL那么简单,因为B也需要它们的引用号来匹配输入掩码。
要求类型:
我想将客户需求存储在数据库(SQL)中,并且可能能够加载具有此数据的类,该数据将能够处理应用程序的UI部分的需求。
项目的组成部分必须是: C#Windows应用程序 WCF数据服务(将在多个应用程序和Web之间使用) SQL Server 2012
答案 0 :(得分:1)
首先,我认为这些不同的客户应该由相应的class
代表。如果客户参考不是公共财产,但它与某种类型的客户相关联,那么您需要使用继承
在您的方案中可以使用的可能良好的设计模式是Specification pattern,如下所示:
public interface ISpecification<T>
{
bool IsSatisfiedBy(T someObject);
}
我猜您将使用依赖注入与反转控制容器框架,并且您将能够配置许多实现ISpecification<T>
。一旦您配置了它们,您就应该能够按T
过滤它们,其中T
将是您的客户类。
也就是说,您可以加载ISpecification<T>
个实现的子集,以检查某个客户实例是否满足一个或多个用于检查特定客户类型。