В последнее время я пишу много классов, в которых, кроме общего варианта, есть несколько примитивных вариантов, например, Foo<T>
, IntFoo
, DoubleFoo
и т. Д. Сначала я использовал каждый вариант в отдельных файлах, ноВскоре я обнаружил, что содержимое пакета стало нечитаемым из-за большого количества классов с похожими именами.С другой стороны, помещение их в отдельный пакет часто приводит к потере сплоченности и дополнительным зависимостям между пакетами.
В то же время я пришел к мысли иметь следующую структуру:
public class Foo {
public static class TypeFoo<T> { ... }
public static class IntFoo { ... }
public static class DoubleFoo { ... }
...
}
или
public class Foo {
public static class Type<T> { ... }
public static class Int { ... }
public static class Double { ... }
}
Меня интересуют две вещи:
- Приводит ли какой-либо из этих двух подходов большие издержки при использовании только одного внутреннего класса (например, int-варианта класса), по сравнению с подходом "один класс на файл"?Применяются ли эти накладные расходы, если таковые имеются, когда вместо них есть внутренние интерфейсы?
- Какой из этих двух подходов лучше, если таковой имеется, или если ни один не хорош, каковы альтернативы?