tldr;寻找一种擅长处理客户对数据库字段的各种需求的设计模式。
一直在寻找,但没有遇到任何有类似问题的人,但如果我遗漏了一个,请告诉我!另外,我怀疑我可能使问题过于复杂,或者试图一次做太多事情。抱歉,收到的文字墙。
好的,我正在为我过去合作过的公司设计一个新的 C# 应用程序。我正在编写此应用程序来替换他们现在已有的 VB6 应用程序。这个新应用程序的范围将用于初始信息收集阶段。
该公司是道路救援;卡车为拥有大型钻井卡车的公司抛 anchor 。他们帮助了数百名客户,每个客户都有自己的要求。公司竭尽全力为每个客户服务,因此我需要提出一个易于管理的设计来处理这些客户规范。所有以前开发的应用程序都有针对数百名客户的内联“if else”逻辑,我仍然对此做噩梦。
示例:
用户将接听客户的电话并收集他们输入到此应用程序中的信息。他们会打电话报告轮胎漏气等事件。有时打电话的人是司机。其他时候,司机会调用他们工作的公司,然后代表会打电话报告事件并请求帮助。让我们关注一些信息,这样我就可以描绘这幅画了。
- 客户引用编号
- 里程表
- 列表项
并非每个客户都需要引用编号。一些客户要求引用编号遵循特定掩码,例如“引用编号必须以 BD-XXX-XXXX-XX 开头”或类似内容。其他客户甚至没有引用编号,因此没有必要捕获此数据(它不存在)。
有些客户需要里程表读数,有些则不需要。
所以你可能会开始看到我的问题。客户 A 不需要引用编号。客户 B 需要一个引用编号。它并不像 NOT NULL 与 NULL 一样简单,因为 B 还需要它们的引用号来匹配输入掩码。
需求类型:
- 字段值必须大于/小于 X
- 字段必须遵守输入掩码
- 字段根本没有收集
- 必填字段
- 字段可选
- 字段值指示其他信息是否必须/不得 集。如果一个特定字段为空,则需要另一个字段
我想将客户需求存储在数据库 (SQL) 中,也许能够使用该数据加载一个类,该类将能够处理应用程序的 UI 部分的需求。
项目的组成部分必须是: C# Windows 应用程序 WCF 数据服务(将在多个应用程序和网络之间使用) SQL 服务器 2012
最佳答案
首先,我认为这些不同的客户应该由一个对应的class
来表示.如果客户引用不是公共(public)属性,但它与特定类型的客户相关联,那么您需要使用继承。
适用于您的场景的可能好的设计模式是 Specification pattern ,看起来如下:
public interface ISpecification<T>
{
bool IsSatisfiedBy(T someObject);
}
我猜你将使用依赖注入(inject)和一些控制反转容器框架,你将能够配置ISpecification<T>
的许多实现。 .一旦你已经配置了它们,你应该能够通过 T
过滤它们, 其中T
将是您的客户类。
也就是说,您将能够加载 ISpecification<T>
的子集用于检查某些客户实例是否满足一个或多个旨在检查特定客户类型的给定规范的实现。
关于c# - 用于存储客户特定要求的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289788/