Sufir, ну говорю, я вижу вариант решения только через bindTo - это эмуляция дружественных методов или доступа по пакету.
В интернетах есть еще вариант debug_backtrace(1); и проверка обьекта... но у bindTo на порядок меньше оверхед и костыльность.
НО. это на самом деле не нужно ибо, консистетность и синхронизация должна происходить на уровне инфраструктуры (если мы не работаем с AggregateRoot)
Инфраструктура знает все о Домене - и вот тут надо не просрать момент и не забыть, что данные нужно синхронизировать.
Пример. Классика. Автор и книги. Бизнес модель обосновывается бизнес задачами: приложение-библиотека, со страничками автора (биография книги) и со страничками книг (авторы, аннотация).
Под Aggregate Root не подходят... у нас тупо две сущности
PHP:
class Book
{
//у книги мнимум один автор
public function __construct(Author $author)
{
$this->addAuthors($author);
}
public function getAuthors()
{
return $this->authors;
}
//можно добавлять
public function addAuthors(Author $author)
{
$this->authors->add($author);
}
//можно удалять
public function removeAuthor(Author $author)
{
$this->authors->remove($author);
}
}
class Author
{
public function getBooks()
{
return $this->books;
}
}
Причем мы даже не замарачиваемся с авторами и не даем им публичного интерфейса для работы, нам не нужно на уровне домена синхронизировать ничего.
Ибо хоть мы и работаем с доменом, но мы знаем, что будет происходит на уровне приложения, а там будет что-то типо
PHP:
// Одмин решил создать книгу
// Сначала он выбирает автора скажем из выпадающего списка
// Помнит, что автор на V начинается
$authors = $authorRepository->findByStr('V');
// тут ему подгружаются авторы и он уже выбирает одного, отправляет запрос на создание книги, где автор с id = 3
// соответсвенно метод уже в другом месте и $authors выгружены из памяти
$author = $authorRepository->findByInternalId(3);
$book = BookFactory::create($author);
$bookRepository->save($book);
// и вот тут самое интересное происходит
// если у нас реляционная базка, то на уровне инфраструктуры все автоматом синхронизируется
// но если скажем у нас Репо это тупо хранение в памяти
// то на уровне репо нам надо позаботится о том, чтобы у автора эта книга появилась
//короче далее одмин решает зайти на страницу автора с тем же id=3 и увидеть все его книги
$author = $authorRepository->findByInternalId(3);
$author->getBooks();