TL;DR: Use arrays for rapid prototyping, use object for serious business
Проблемы
- Связь
- Сокрытие информации
- Дублирование кода
- Быстрая ошибка
- Честность
Решения
- Овеществление объектов
- Создавайте связные небольшие объекты
- Избегайте анемичных объектов и определяйте их связные отношения.
Образец кода
Неправильный
// Array with some raw data, what can go wrong? val coordinates = arrayOf(1000.0, 2000.0)
Анемичный
data class GeographicCoordinate( val longitude: Double, val latitude: Double ) // An error should be thrown since these values don't exist on Earth val coordinates = GeographicCoordinate(1000.0, 2000.0)
Утверждено
class GeographicCoordinate( val longitude: Double, val latitude: Double ) { init { if (!isValidLatitude(latitude)) throw InvalidLatitudeException(latitude) if (!isValidLongitude(longitude)) throw InvalidLongitudeException(longitude) } private fun isValidLatitude(latitude: Double) = latitude in -90.0..90.0 private fun isValidLongitude(longitude: Double) = longitude in -180.0..180.0 } // An error should be thrown since these values don't exist on Earth val coordinates = GeographicCoordinate(1000.0, 2000.0)
Верно
Степени заслуживают овеществления…
data class Latitude(val degree: Double) { init { if (degree !in -90.0..90.0) throw InvalidLatitudeException(degree) } } data class Longitude(val degree: Double) { init { if (degree !in -180.0..180.0) throw InvalidLongitudeException(degree) } } data class GeographicCoordinate( val longitude: Longitude, val latitude: Latitude ) // An error should be thrown since these values don't exist on Earth val coordinates = GeographicCoordinate( Longitude(1000.0), Latitude(2000.0) )
Многие люди страдают примитивной одержимостью и считают, что это чрезмерный дизайн. Разработка программного обеспечения — это принятие решений и сравнение компромиссов. Аргумент производительности в настоящее время недействителен, поскольку современные виртуальные машины могут эффективно работать с небольшими недолговечными объектами.
Заключение
При создании объектов мы не должны думать о них как о данных. Это распространенное заблуждение.
Мы должны оставаться верными нашей Биекции и открывать объекты реального мира.
Большинство ассоциативных массивов связаны и представляют объекты реального мира, и мы должны обращаться с ними как с объектами первого класса.
Будьте в курсе моих последних мыслей и идей, подписавшись на мою рассылку новостей. Свяжитесь со мной в LinkedIn или Twitter. Оставайтесь на связи и продолжайте общение!
Кредиты
Первоначально опубликовано на https://yonatankarp.com.