Объекты-значения — это важный шаблон проектирования в DDD, представляющий объекты, равенство которых определяется значениями их атрибутов, а не идентификаторами.
В этом посте мы погрузимся в мир объектов-значений DDD и рассмотрим, как добиться его наиболее важного свойства, а именно неизменности, с помощью Golang.
Поля частных структур
Объявите свои объекты-значения как структуры Go и инкапсулируйте поля объекта-значения, начав их имена со строчной буквы.
Это ограничивает прямой доступ к полям извне пакета, предотвращая внешние модификации.
type Point struct { x, y int }
Нет методов установки
Избегайте определения методов установки для полей вашего объекта значения. Потому что это сделает ваш объект значения изменяемым.
Необязательные методы получения
Методы получения необходимы только в том случае, если вы хотите открыть поля вашего объекта значения для внешнего мира.
func (p Point) X() int { return p.x } func (p Point) Y() int { return p.y }
Чистые функции
Определите методы для объекта значения, которые не изменяют его внутреннее состояние. Эти методы должны возвращать новые экземпляры с измененными атрибутами, оставляя исходный объект без изменений.
func (p Point) Plus(other Point) Point { return Point{x: p.x + other.x, y: p.y + other.y} }
Следуя этим рекомендациям, вы можете быть уверены в неизменности ваших объектов-значений в Golang.