У меня есть курсор, где каждая строка представляет атрибуты объекта в той же иерархии. Эти объекты не принадлежат к одному и тому же классу. Каждая строка используется для создания экземпляра подкласса из одной иерархии. Курсор включает в себя столбец типа, который определяет конкретный подкласс для создания экземпляра. Каждому подклассу нужны значения из общего набора столбцов от курсора плюс набор столбцов, уникальных для конкретного подкласса. Некоторые столбцы применяются к одной строке, а не к другим - подумайте над большой таблицей соединений.
Я хочу избежать дублирования в моем коде синтаксического анализа при сохранении кода в чистоте. До сих пор я играл с несколькими подходами, ни один из которых не кажется идеальным:
Имеется один метод фабрики, который извлекает все общие столбцы, проверяет тип, а затем использует его для извлечения дополнительных столбцов и создания экземпляра класса. Pro: без дублирования Con: один большой уродливый метод
Иметь заводской метод для каждого типа, который выбирается с использованием только столбца типа. Pro: очень близкий код, который легко поддерживать Con: дублирует код, который извлекает общие столбцы каждый раз
Имейте единственный метод, который извлекает значения из общих столбцов и затем передает их другим фабричным методам каждого типа. Pro: без дублирования, довольно близко к Con: методы большого старого с большим количеством параметров
Включить конструкторы для моих объектов, которые принимают курсор. Подклассы извлекают то, что им нужно, а затем передают курсор в супер, чтобы получить общие вещи. Pro: Очень близко к Con: нарушает инкапсуляцию. Вносит риск в конструкторы из задач Курсора
Это похоже на проблему, которая часто возникает, и мне бы очень хотелось услышать о решениях лучше, чем те, которые описаны выше. Или это просто разбор кода, являющийся разбором кода и, следовательно, уродливый?