В последнее время кто-то сказал мне, что круговые ссылки в форме класса 1 называет вызовы класса 2 класса 1, считается крайне плохой практикой, и я просто не могу об этом подумать. Я имею в виду, если эти классы находятся в двух разных проектах, я полностью понимаю проблематику, но может быть плохо, если они находятся в одном проекте? И в некоторых случаях ... как именно вы это предотвращаете?Циркулярные ссылки на классы плохой практики?
Например: у меня есть сервер. Клиенты подключаются к нему, а Клиент, который происходит из сокета или хранит его, заботится о сетевом материале, а также о некоторой информации, такой как идентификатор учетной записи и т. Д. Этот клиент вызывает обработчик пакетов, когда есть что-то новое, и теперь обработчик пакета нуждается в информации от клиента и должен отправить информацию обратно. Я передаю Клиенту обработчик пакетов, поэтому он может вызывать его функции отправки и т. Д.
Человек, который был обеспокоен этим, думал, что это была упомянутая плохая практика, и старался не делать этого вообще, хотя я «Мы редко видели серверы, особенно большие, которые сохраняли всю обработку пакетов внутри класса клиента. Кроме того, вы можете пойти дальше, чем обработчик, и вызвать больше классов. Это беспорядок, чтобы держать все это внутри Клиента. Итак ... это действительно плохая практика?
Если да, то как бы обойти его? Чтобы это сделать, вам понадобится более или менее сложный сбор объектов в Клиенте, который вы можете передать без необходимости повторять вызовы функций клиента ...
Как я уже сказал, я не могу оберните мою голову вокруг этой «проблемы». Кто-нибудь может мне помочь?
F # делает циркулярные ссылки на класс реальной забавой. – ChaosPandion
Просмотрите список связанных вопросов. ---------> похоже, есть несколько, которые могли бы помочь ответить на вопрос. –
В большинстве случаев я нахожу, что я могу реструктурировать такой код для проблемы потребителя/производителя, которая устраняет половину соединения, что приводит к созданию более чистого дизайна. В тех случаях, когда это не работает, я использую * специфические интерфейсы * (которые я пытаюсь сделать в любом случае); еще раз, я нахожу, что они могут минимизировать «круговые ссылки» на основные требуемые аспекты и сделать программу более понятной. –