我正在尝试为我的公司创建一个基于 Web 的工具,该工具本质上是使用地理输入来生成表格结果。目前,三个不同的业务领域使用我的工具并获得三种不同的输出。幸运的是,所有的输出都基于相同的主表 - 子表的想法,它们甚至共享一个共同的主表。
不幸的是,在每种情况下,子表的相关行都包含截然不同的数据。因为这是唯一的争论点,所以我将一个FetchChildData
方法提取到一个名为DetailFinder
. 结果,我的代码如下所示:
DetailFinder DetailHandler;
if (ReportType == "Planning")
DetailHandler = new PlanningFinder();
else if (ReportType == "Operations")
DetailHandler = new OperationsFinder();
else if (ReportType == "Maintenance")
DetailHandler = new MaintenanceFinder();
DataTable ChildTable = DetailHandler.FetchChildData(Master);
其中 PlanningFinder、OperationsFinder 和 MaintenanceFinder 都是 DetailFinder 的子类。
我刚刚被要求添加对另一个业务领域的支持,并且不愿意继续这种if
块趋势。我更希望有一个如下所示的解析方法:
DetailFinder DetailHandler = DetailFinder.Parse(ReportType);
但是,我不知道如何DetailFinder
知道哪些子类处理每个字符串,甚至不知道存在哪些子类,而不仅仅是将 if 块转移到Parse
方法中。有没有办法让子类在 abstract 中注册自己DetailFinder
?