Пётр Кушнир писал(а):
Сначала агенты были модули, потом захотелось агентов-объектов, сделал агенты-объекты через "просто список ссылок", но там надо было регистрировать вручную, долго и нудно. Плюс слегка противоречит концепции агентов, как неких "самостоятельных сущностей". Покопался и сделал хук в Kernel.NewObj чтобы выслеживать объекты на этапе создания, проверять тип и нужные сразу неявно регистрировать.
Честно говоря не понял трудностей на этом этапе.
Обычно, на этапе создания нам известен тип/класс объекта.
Следовательно, все нюансы создания известны.
В том числе и сама процедура создания. Сами (сопутствующие) операции создания, можно сгруппировать тем или иным способом (в том числе и в некую «фабричность»).
Пётр Кушнир писал(а):
Выяснилось, когда неявно добавляешь объект в список агентов, то в клиентском коде уже нет такого места, где можно было бы явно убрать из списка, поэтому понадобились WeakRef (честно украл у Ермакова И.Е.), такой вид ссылки, которая зануляется при смерти/сборке конкретного объекта.
А что такое «неявное добавление» в список агентов?
«Зануляются» ВСЕ ссылки на уничтожаемый экземпляр объекта?
Зачем?
Мои вопросы могут выглядеть наивными, но я никогда ещё не пользовался (и не приходил к необходимости формирования понятия «слабых ссылок/указателей») в своих системах. У меня есть лёгкое подозрение, что необходимость в «особенных» ссылках/указателях появляется при ошибках в проектировании архитектуры и концепций системы.
Пётр Кушнир писал(а):
А клиентский кот сам решал, когда убрать объект-агент из собственных внутренних реестров, которые типа охраняли объект от сборки мусора. И ещё для View вне зоны видимости окна, до него никакие сообщения не долетают, а тут вот, долетает, через стороннюю шину и слабую ссылку, что не мешает жыть всему GUI.
У меня есть вопрос. В данном случае элементы поддержки связности по спискам, случайно, не были внесены в сами объекты-агенты (например, в виде полей next и prev)?
Пётр Кушнир писал(а):
Код не дам, давно это было.
«Понимаем...»(с)Товарищ Сухов