Я полагаю, что когда люди говорят, что статические фабричные методы «... [это] архитектурная черная дыра» », они имеют в виду проблему, заключающуюся в том, что расширение фабричных методов бесполезно. Смысл в том, насколько сложны созданные классы. Если они тяжелые, то, вероятно, статические фабричные методы в конечном итоге приведут к беспорядку.
В C # действительно есть модификатор «internal», который не заменяет друга, поскольку другие работают над вашими классами, но когда важна ваша способность расширять фабрики в будущем, а не другие, вы может упаковать фабрики и созданные классы как отдельную сборку и, таким образом, использовать «внутренний», например, «друг».
И, да, это проблема при работе с C #. Противоречивые требования, которые отбросили поддержку старого дружественного фабричного класса, и это болезненно. Если вы не можете использовать «internal», и ваши фабрики производят тяжеловесные классы, на самом деле нет никакой альтернативы добавлению метода типа «InitInstance ()» к классам, чтобы можно было расширить «производственный процесс».