Какой ORM поддерживает модель домена неизменяемых типов?
Я хотел бы написать классы, подобные следующим (или эквивалент Scala):
class A {
private final C c; //not mutable
A(B b) {
//init c
}
A doSomething(B b) {
// build a new A
}
}
ORM должен инициализировать объект конструктором. Таким образом, можно проверить инварианты в конструкторе. Конструктор по умолчанию и доступ к полям/сеттерам для инициализации недостаточно и усложняют реализацию класса.
Работа с коллекциями должна поддерживаться. Если коллекция изменена, она должна создать копию с точки зрения пользователя. (Предоставление старого состояния коллекции устарело, но код пользователя все еще может работать (или, по крайней мере, читать).) Как и в постоянных структурах данных.
Несколько слов о мотивации. Предположим, у вас есть объектная модель домена типа FP. Теперь вы хотите сохранить это в базе данных. Кто вы это делаете? Вы хотите делать столько, сколько можете, в чисто функциональном стиле, пока не появится эффект злых сторон. Если объектная модель домена не является неизменной, вы можете, например, не делиться объектами между потоками. Вы должны копировать, кэшировать или использовать блокировки. Поэтому, если ваш ORM не поддерживает неизменные типы, которые вы ограничены в своем выборе решения.