В настоящее время я пишу библиотеку, которая обрабатывает события для наблюдения за событиями eyetracking. Я несколько раз переработал общий дизайн библиотеки, наконец, придумал понравившийся мне дизайн, предоставив всей библиотеке всеобъемлющую тему использования.Кодирование дублирования по сравнению с обобщающей кодовой базой
Я реализовал библиотеку таким образом, но вскоре я понял, что мне пришлось дублировать код в нескольких классах. Я на самом деле не думал об этом, так как эти классы в основном делали то же самое, но для разных видов событий для наблюдения за глазами.
Теперь, когда я почти готов к выпуску, я понимаю, что существует несколько классов, которые можно обобщить с использованием дженериков, поскольку некоторые из классов содержат 80% + дублированного кода.
Но есть несколько проблем, я вижу, что я бы столкнуться, когда рефакторинг текущих кодового к родовым один:
- Я бы добавить методы интерфейса, которые могли бы иметь смысл для всего Выводя классы, но они никогда не были частью спецификации для большинства из них.
- Мне пришлось бы заменить большую часть документации для конкретных типов (лучшие практики, общие gotchas и т. д.) с очень общей документацией, которая на самом деле не помогает пользователю
- Половина библиотеки будет использовать сильно вложенные дженерики, в то время как r half будет в основном оставаться неизменным, уменьшая положительные эффекты обучения/использования всеобъемлющего дизайна, который я придумал.
- Общая часть библиотеки может быть использована практически с любым, но на самом деле не будет полезна ни для чего, кроме целей для снятия глаз
- небольшое изменение в требованиях к библиотеке может нарушить общий дизайн, имея для возврата кодовых обратно в состояние, похожее на текущий
Как вы думаете, действительно ли это так плохо, чтобы иметь дублирование кода, если его удаление будет означать все вышеперечисленное?
Какой процент текущей кодовой базы будет считаться дублирующейся до той точки, где он может быть реорганизован как общий? Если только несколько процентов, и вы ожидаете, что это, возможно, придется специализироваться позже, так или иначе, то я бы сказал, просто оставим вещи как есть. –
Существует 4 класса, которые имеют дубликат. Эти классы обрабатывают различные типы событий eytracking, которые связаны, но не абстрагируемы к общему интерфейсу. Единственное, что у них есть, это то, что они могут быть упорядочены в хронологическом порядке, которые я уже учитывал в общем сопоставимом интерфейсе и классе коллекции. В процентах я бы сказал, что это может быть 30%. –
С учетом того, что кодовая база на самом деле не такая большая, 4 класса от малого до среднего могут быть лучшей метрикой. –