Единственное, что пространство имен действительно влияет на методы расширения, - это видимость и обнаруживаемость, поэтому все зависит от того, хотите ли вы, чтобы методы расширения всегда отображались в этом типе или нет. Руководящие указания по разработке каркаса предназначены в первую очередь для общедоступных API, и поэтому, как правило, им следует следовать, правила для них очень распространены, когда это имеет смысл.
Например, мы много работаем с TimeSpan
объектами по всей кодовой базе, и нет никаких методов для их умножения или деления в рамках, поэтому мы добавили методы расширения MultiplyBy
и DivideBy
, среди прочего, и поместите их в пространство имен System
, потому что мы хотим, чтобы они были доступны и обнаруживались везде, где используется TimeSpan
.
С другой стороны, мы также выполняем довольно много работы по отражению, работая с Type
объектами, и существует множество методов расширения, которые очень полезны в определенных областях, но не в целом, поэтому они живут в OurCompany.Reflection
пространство имен, поэтому они должны быть специально импортированы.
Так что для внутренних API решение сводится к «хочу ли я, чтобы этот метод был доступен везде, где тип доступен в нашей кодовой базе?». Если ответ «да», поместите его в то же пространство имен, в противном случае поместите его где-нибудь еще.