Допустим, у меня есть класс Customer, у которого есть свойство customerType.
У меня есть другой класс, который называется что-то вроде SpecialContract, у которого есть Customer и некоторые другие свойства.
Если customer.customerType == SPECIAL, то существует SpecialContract, который имеет ссылку на этого конкретного клиента.
Теперь я понимаю, что это немного нелепо, но я не хочу поддерживать отношения от Клиента до SpecialContract по нескольким причинам, одна из которых заключается в том, что большую часть времени при работе с Клиентами мы не нужно загружать SpecialContracts и все другие данные, связанные с SpecialContracts. Однако я всегда хочу знать, есть ли у Customer SpecialContract, и это достигается с помощью его свойства customerType.
Хорошо, вот сложная часть. Я не хочу, чтобы клиент мог устанавливать customerType, потому что простое выполнение не удалит SpecialContract, который применяется к клиенту, что потребуется. Я бы предпочел заставить клиента вызывать метод службы для удаления SpecialContract, который также установил бы для customerType значение NOTSPECIAL для всех в одной транзакции.
Как я могу скрыть установщик customerType от клиентов, но по-прежнему предоставлять его моему классу уровня обслуживания, который будет отвечать за установку правильного значения, а также за удаление SpecialContract? Мой класс обслуживания не входит в тот же пакет, что и класс Customer.