Является ли это правильной теорией ООП или нет, предстоит обсудить, но, в зависимости от обстоятельств, я бы не стал исключать С довольно быстро. Несмотря на то, что она создает довольно большую зависимость, она может использоваться, если особая роль C заключается в управлении взаимодействием (и копированием) из A в B. Зависимость создается в C специально, чтобы избежать создания такой зависимости между A и B. Кроме того, C существует специально для управления зависимостями и может быть реализован с учетом этого.
Ex. (в vb.Net/Pseudocode):
Public Class C
Public Shared Function BClassFactory(ByVal MyA As A) As B
Dim NewB As New B
With B
.CommonProperty1 = A.CommonProperty1
.CommonProperty2 = A.CommonProperty2
End With
Return B
End Function
End Class
Если есть конкретная причина для создания, скажем, AtoBConverterClass, этот подход может быть действительным.
Опять же, это может быть специализированный случай. Однако я нашел это полезным в некоторых случаях. Особенно, если есть ДЕЙСТВИТЕЛЬНО ВАЖНЫЕ причины держать A и B в неведении друг о друге.