Если на Character есть getter к position то возможно менять позицию и без того чтобы использовать character.move. Если getter-a нет, то как использовать местоположение персонажа?
Если переданный объект иммумабилен то не страшно что кто то изменит его.
Не понял почему нарушил???
Думаю я не понял правильно что вы имели ввиду под "целостен".
В таком случае придется передовать в конструктор только примитивные данные (или иммутабельные объекты) чтобы не было возможно их менять снаружи, а в конструкторе создавать position для персонажа.
а в конструкторе создавать position для персонажа. Именно. При создании объекта мы передаем ему в конструктор начальную позицию, после чего мутируем через метод сеттер, или to или move или еще как называем метод перемещения.