Я пытаюсь создать веб-инструмент для моей компании, который, по сути, использует географический ввод для получения табличных результатов. В настоящее время мой инструмент используют три различных сферы бизнеса и получают три разных вида продукции. К счастью, все выходы основаны на одной и той же идее Master Table - Child Table, и они даже имеют общую Master Table.
К сожалению, в каждом случае связанные строки дочерней таблицы содержат совершенно разные данные. Поскольку это единственный спорный вопрос, я выделил метод 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
. Есть ли способ для подклассов зарегистрировать себя с абстрактным DetailFinder
?