Собственно что у нас хорошего появилось? Я писал на нём когда был C# 5.0, нынче многое поменялось, добавили readonly, сильно улучшили асинхронщину, внесли кортежи и так далее. Это не могло не повлиять на то как сейчас принято писать. У Python-а есть удобные pep (PEP8, PEP20 как самые известные, которых я всегда стараюсь придерживаться), а что есть у C# взамен, чего придерживается большинство разработчиков?
Хотелось бы глянуть как на конструкции и советы когда их лучше использовать, так и что-то по принятым методикам проектирования приложений. Я сейчас пользуюсь общими соображениями, которые годятся для любого ООП языка (в основном соображениями полученными от разработки на C++ в плане проектирования, паттернов и глобальной архитектуры и немного соображениями Python-а в плане оформления ну и плюс понятно старые подходы в C# которые никуда не делись и про которые я не забыл, вроде _somePrivateField для наименования закрытых полей). Но хочется чего-то характерное для C# глянуть.
Посмотрел пока «Паттерны проектирования для C# и платформы .NET Core» но оно как на мой взгляд слишком для новичков, есть какие-то крупицы полезной для меня информации в последних главах, но оно такое, немного не то что я хотел бы в приоритете увидеть. Мне интереснее было бы почитать про хороший тон проектирования библиотек и крупных приложений (и использование в них интерфейсов - понятно что для масштабируемости в плане роста кодовой базы, множественного наследования, контроля реализации их стоит использовать).
Например, есть костыли и хаки когда через них делают группировку методов по сути, чтоб, например, обращаться к классу с сотнями методов, особенно когда в разных интерфейсах есть одинаковые названия через . По типу Human.Head.Nose.GetHP();, Вместо Human.GetNoseHP(); когда у хумана не только нос, на голове но скажем и каждая фаланга в пальцах есть. Делается это, например, через explicit interfaces но там начинаются сомнительные конструкции, которые требуют и partial class и шаманство с интерфейсами, которое далеко не в каждой книжке для нубасов описывается, да и когда-то в дремучие времена такие классы ломали mvc3 а без него, возможно, работали (не проверял но учитывая то сколько предупреждении о таких конструкциях я видел на стаковерфлоу то я не знаю либо оно не работало именно с mvc3 и работало без него, либо mvc3 построенный вокруг c#4 жил сильно дольше чем сам C# 4, но скорее первое если верить датам, например, тут, а значит это просто грязный хак), а значит это не очень хорошая практика.
Дробить классы на подклассы, которые включать в члены класса тоже такое себе, если следовать правилу что выделенный класс должен быть самостоятельным (и иметь самостоятельное время жизни к примеру), голова это не совсем самостоятельный живой организм, без тушки существовать не должна, а если и должна, например, в виде объекта в игре если её отрубили, то уже не в том виде, например глазами моргать отрубленная голова не должна и говорить тоже. Потому логично что и отдельным независимым объектом в составе человечка в игре она не должна быть.