У досить великому проекті є вихідний файл з кількома функціями, які надзвичайно чутливі до продуктивності (називаються мільйонами разів на секунду). Насправді попередній супровідник вирішив написати 12 копій функції, кожна з яких відрізняється дуже незначно, щоб заощадити час, який буде витрачено на перевірку умовних умов в одній функції.
На жаль, це означає, що код є ПДФА для підтримки. Я хотів би видалити весь повторюваний код і написати лише один шаблон. Однак мова, Java, не підтримує шаблони, і я не впевнений, що дженерики для цього підходять.
Мій поточний план полягає в тому, щоб написати замість цього файл, який генерує 12 копій функції (практично єдиний розширювач шаблонів, практично). Я, звичайно, надаю рясне пояснення, чому файл повинен генеруватися програмно.
Я хвилююсь, що це призведе до плутанини майбутніх утримувачів і, можливо, введе неприємні помилки, якщо вони забудуть відновити файл після його модифікації, або (що ще гірше), якщо вони замінять файл, створений програмно. На жаль, якщо переписати всю справу на C ++, я не бачу способу це виправити.
Чи переваги такого підходу переважають недоліки? Чи слід замість цього:
- Скористайтеся хітом продуктивності та використовуйте єдину, доцільну функцію.
- Додайте пояснення, чому цю функцію потрібно дублювати 12 разів, і милосердно берете на себе тягар з обслуговування.
- Спроба використовувати дженерики як шаблони (вони, ймовірно, не працюють таким чином).
- Кричите на старий супровідник, щоб зробити код настільки залежним від продуктивності від однієї функції.
- Інший метод підтримки продуктивності та ремонту?
PS Через поганий дизайн проекту, профілювання функції є досить складним ... однак колишній супровідник переконав мене в тому, що показ продуктивності неприйнятний. Я припускаю, що це означає більше 5%, хоча це є повною здогадкою з мого боку.
Можливо, я повинен трохи допрацювати. 12 примірників виконують дуже схоже завдання, але мають хвилинну різницю. Відмінності є в різних місцях по всій функції, тому, на жаль, існує багато, багато, умовних тверджень. Є ефективно 6 "режимів" роботи та 2 "парадигми" роботи (слова, складені власноруч). Для використання функції вказується "режим" і "парадигма" роботи. Це ніколи не є динамічним; кожен фрагмент коду використовує рівно один режим і парадигму. Усі 12 мод-парадигмних пар використовуються десь у додатку. Функції влучно називаються func1 to func12, парні числа представляють другу парадигму, а непарні числа представляють першу парадигму.
Я усвідомлюю, що мова йде лише про найгірший дизайн, коли мета - це ремонтопридатність. Але він, здається, "досить швидкий", і цей код деякий час не потребував змін ... Варто також зазначити, що оригінальну функцію не видалено (хоча, наскільки я можу сказати, це мертвий код) , тож рефакторинг був би простим.
Makefile
" (або будь-якої іншої системи, яку ви використовуєте), і видаліть її правою після завершення компіляції завершено . Таким чином, вони просто не мають можливості змінити неправильний вихідний файл.