Это всего лишь дополнение к некоторым прекрасным предложениям книг здесь.
Чем лучше я добираюсь до ОО, тем больше я, кажется, уменьшаю размер объекта. Это не так, как будто я собираюсь за маленький размер объекта или что-то еще, но это, кажется, происходит.
Сохранение их небольшой, единой ответственности, простой в использовании и понимании - все это важно. Каждый объект должен быть как можно ближе к пуленепробиваемому, проверять ваши параметры и никогда не позволять вашему объекту переходить в недопустимое состояние. Четко определите все действительные состояния в документации.
Каждый раз, когда вы создаете класс, создайте тест для этого класса. Он не только проверяет ваш код, но и заставляет вас использовать свой собственный дизайн. Всегда думайте о своем классе из этого «внешнего вида». Убедитесь, что вы не спрашиваете слишком много о человеке, использующем ваш класс, и все, что вы спрашиваете о нем, должно быть задокументировано в интерфейсе. Часто я просто добавляю быстрый класс в класс, если нет доступной среды тестирования - он помещает пример использования вашего кода прямо в тот же файл.
В кодировании почти все мое время тратится на выяснение того, что сделал кто-то другой. Если бы я мог просто выпустить код, используя известные или хорошо документированные API, моя работа была бы тривиальной, а графики значительно короче.
Дизайн первый может быть трудным. Считайте, что кодирование похоже на спортивное умение. Большинство из нас играют на подъездных дорожках, некоторые играют в местных спортивных командах. Сделать хороший предварительный дизайн для сложного проекта - задача игрока национальной лиги, они - один на миллион. Примите это и планируйте изменения - итерации - ваш друг. (Кстати, большинство из нас ДУМАЮ, что мы на государственном уровне легко. Мы не).