É uma má prática passar o objeto atual em uma chamada de método se houver alternativas menos complexas para obter o mesmo comportamento.
Por definição, uma associação bidirecional é criada assim que thisé passada de um objeto para outro.
Para citar Refatoração, por Martin Fowler:
Alterar associação bidirecional para unidirecional (200)
As associações bidirecionais são úteis, mas têm um preço. O preço é a complexidade adicional de manter os links bidirecionais e garantir que os objetos sejam criados e removidos corretamente. As associações bidirecionais não são naturais para muitos programadores, então muitas vezes são uma fonte de erros
...
Você deve usar associações bidirecionais quando for necessário, mas não quando não for necessário. Assim que você perceber que uma associação bidirecional não está mais exercendo sua influência, descarte a extremidade desnecessária.
Então, teoricamente, deveríamos estar ouvindo alarmes quando acharmos que precisamos passar thise tentar realmente pensar em outras maneiras de resolver o problema em questão. É claro que há momentos em que, em último recurso, faz sentido fazer isso.
Também é frequentemente necessário corromper seu design temporariamente, fazendo 'coisas de prática ruim', durante uma refatoração de longo prazo de seu código para uma melhoria geral. (Um passo para trás, dois passos para a frente).
Na prática, descobri que meu código melhorou muito , evitando links bidirecionais como a praga.