Следуйте правилам нейминга, используйте семантику
Не использовать сокращения
Использовать общепринятые английские термины для нейминга классов/свойств/методов
Не используйте транслитерацию
Не используйте машинный перевод для исконно русских терминов
Не используйте системные/зарезервированные термины в ваших классах
Пример плохого нейминга:
// Метод добавления студента в подпоток
class Thread {
void Join(Student student) { … }
}
Познакомиться с кодстайлом, префиксами для интерфейсов
Следуйте правилам семантического нейминга комитов
Использовать конструкторы для создания полностью инициализированого объекта
Минимизировать область доступа к данным, закрывать возможность изменять тип из-вне. Стремиться к минимизации статических полей. Если поле класса используется только внутри одного метода - инлайнить, если используется для передачи данных между методами - перепроектировать решение.
Проверяйте может ли метод выполниться с переданными аргументами, если эти аргументы - это пользовательский ввод.
При реализации методов создания или поиска, стоит возвращать сущности, а не какие-то их части - названия или идентификаторы. Если написано, что нужно найти магазин, то ожидается, что вернется не строка, а магазин.
Минимизировать использование статических методов, полей и классов. Если в коде была использована статика, то нужно обозначить комментарием почему это решение лучше в таком виде, нежели без статики.
Стараться минимизировать вложенность за счет инвертирования условий.
Делать всю возможную валидацию аргументов в конструкторе (например, на null)
Стараться делать типы иммутабельными. Особенно в кейсах, где мутабельность объекта нужно для инициализации вне конструктора:
// Плохо:
var group = new Group();
group.Name = "Tasks";
// Хорошо:
var group = new Group("Tasks");
Поддерживать инвариант типа. Никакое изменение не должно делать экземпляр класса не валидным.
Разделять бизнес логику и логику работы с UI. Разделять логику, парсинг аргументов и валидацию
Если есть зависимость от внешних сущностей, то их нужно прокидывать аргументами.
Бросать понятные ошибки бизнес логики (т.е. не из namespace'a System). Обрабатывать возможные NRE, OutOfRange etc и вместо них бросать понятные. Сообщения ошибок стоит писать на английском. Если хочется поддержать русский, то нужно смотреть в сторону локализации.