Я знаю, что неизменность не всегда является Святым Граалем. Однако, поскольку я изучаю Scala уже довольно давно, я всегда стараюсь сначала найти неизменное решение, особенно когда речь идет о чистых «объектах данных». В настоящее время я ищу метод создания неизменяемого графа объектов для данного сценария, но я не уверен, что это вообще возможно.
Я просто хочу создать график один раз, изменения после создания не нужны.
Представьте себе следующий сценарий:
- Есть только один тип:
Person
. Person
objects can have two types of references:- there is a unidirected 1-n relationship between a Person and potential children (also of type
Person
). - Кроме того, жены имеют мужей и наоборот
- there is a unidirected 1-n relationship between a Person and potential children (also of type
Первая проблема заключается в том, что отношения между двумя супругами цикличны. Поскольку установка ссылок приводит к появлению новых объектов (из-за неизменности), в конечном итоге супруга A указывает на супругу B_old, а супруга B указывает на супругу A_old. Кто-то в другом сообщении сказал, что циклические ссылки и неизменность — это оксюморон. Я не думаю, что это всегда так, поскольку супруг A может создать супруга B в своем собственном конструкторе и передать this
, но даже при использовании этого неудобного подхода последующее добавление ссылок на дочерние элементы снова изменит A и B. Наоборот, начиная с детей, а затем соединяя супругов, получается аналогичная ситуация.
На данный момент я думаю, что нет никакого способа сделать это. но, возможно, я ошибаюсь, и есть какие-то шаблоны или обходные пути, о которых я не знаю. Если нет, то является ли изменчивость единственным решением?