Ответ
Абстракция должна быть достаточно общей, чтобы избежать дублирования кода и обеспечить гибкость, но не настолько общей, чтобы усложнить понимание и поддержку. Идеальный уровень абстракции:
- Решает конкретную проблему – не пытайся покрыть все возможные случаи.
- Минимизирует изменения – при изменении требований модифицируется минимальное количество кода.
- Сохраняет читаемость – абстракция не должна скрывать важные детали.
Пример:
// Слишком общая (плохо)
interface Processor<T> {
fun process(data: T): T
}
// Оптимальная абстракция (хорошо)
interface ImageProcessor {
fun applyFilter(image: Bitmap, filter: Filter): Bitmap
}