На днях, очень оживлённо обсуждали с коллегами один интересный подход к написнию кода. Хочу поделиться с вами некоторыми его деталями и пригласить присоединиться к обсуждению. Представим, что у нас есть некоторая сущность, соответствующая одноимённой таблице в базе данных: @Table(value = "employee")
data class EmployeeEntity(
@Id
val id: Long? = null,
@Column("name")
val name: String,
) Модель, которая соответствует этой сущности, я и мои коллеги-котлинисты привыкли писать примерно так: data class Employee(
val id: Long,
val name: String,
) Та же самая модель, но написанная с применением подхода, который мы обсуждали, будет выглядеть примерно так: data class Employee(
val id: Id<Employee>,
val name: String,
) Отличаются эти две модели только полем id. В первом случае, id - это простой Long. Во втором - это кастомный тип, параметризованный типом самой сущности (такой уроборос). Вот так этот кастомный тип Id может выглядеть: class Id<T : Any> private co