У меня есть Java-приложение, в котором уровень домена отделен от интерфейса контроллерами.Проблема состоит в том, что эти контроллеры могут возвращать доменные объекты и могут иметь доменные объекты в качестве параметров.
Некоторые из этих возвращаемых доменных объектов являются изменяемыми, и это то, что я хочу предотвратить.Я хочу, чтобы пользовательский интерфейс (или будущие пользовательские интерфейсы) не мог напрямую изменить домен без доступа к контроллерам.
Я попробовал два варианта:
В первом яудостоверился, что в каждом классе реализован «неизменяемый» интерфейс , содержащий только геттеры.И если мне нужно было вернуть объект в пользовательский интерфейс, я вернул его «немодифицируемый» интерфейс.Так что пользовательский интерфейс мог только просматривать геттеры.Проблема в том, что их все еще можно легко привести к исходному объекту и получить доступ.Сначала я думал, что этот уровень безопасности достаточно хорош, но случилось так, что кто-то случайно бросил некоторые объекты и использовал их неправильно, и целостность была нарушена.
Во второмя попытался предоставить неизменяемые оболочки для каждого возвращаемого объекта.Но проблема в том, что эти возвращенные объекты можно использовать в качестве параметров для методов в контроллерах, поэтому их необходимо развернуть в контроллерах.Я пытался сделать пакет uwrap()
method методу приватным, но затем я должен поместить каждый определенный класс-оболочку в один пакет с контроллерами, и это немного неудобно.
РЕДАКТИРОВАТЬ: 3-й вариант:
- (Благодаря vic ) В третьем варианте объект оборачивается неизменяемой оболочкой ,но не может быть развернут этой оболочкой.Каждый немодифицируемый связан с его изменяемым объектом в Hashmap.Таким образом, «распаковка» выполняется путем получения модифицируемого объекта, который связан с немодифицируемым объектом.
Кто-нибудь знает или имеет какие-то идеи относительно , как сделать объекты немодифицируемыми, чтобы они могли быть возвращеныконтроллер, и сделать возможным сделать их снова изменяемыми, когда они возвращаются обратно в контроллеры?