Есть теория, а затем есть практика ... и затем вы, как инженер-программист, пытаетесь сбалансировать их обоих.
Теоретически вы должны делать объекты практически всем, пока не упадете до наименьших возможных элементов, примитивных типов (булево, строковое, целое и т. Д.). Ну ... это довольно упрощенно, но с этим редко бывает не так ...
то есть ...
до тех пор, пока вы действительно не создадите (то есть кодируете классы) вещь.
На практическом конце спектра вы можете определить все в одном большом классе и покончить с этим ... то есть ... до тех пор, пока вам не придется определять тонкие изменения в поведении (внешняя дверь, дверь гаража, дверь собаки и т. Д.) ).
Мой подход обычно состоит в том, чтобы начать с одного большого класса (уродливо, но это быстро, чтобы кодировать, и я могу получить рабочий прототип быстрее). Затем, если мне когда-либо понадобится определить настройки или новое поведение или повторно использовать какую-то часть целого, тогда я создаю наименьший элемент и реорганизую большой элемент, чтобы использовать меньший элемент вместо определения его собственных атрибутов.
Например. Я кодирую класс двери, и оттуда я могу создать (создать экземпляр) столько дверей, сколько захочу, но они все одинаковые и ведут себя одинаково. Теперь я понимаю, что мне нужно также определить окна, которые вращаются вокруг петель ... подождите ... двери также имеют петли. Здесь я создаю класс петли, который может использоваться как дверью, так и окном, и удаляю любой способ, который у меня был до того, как определить шарнир в классе двери. Затем продолжайте работать, пока не столкнитесь с ситуацией, когда я смогу повторно использовать некоторые детали в нескольких объектах (дескриптор, рамка и т. Д.).
- Никогда не сверлите объект, пока вам не придется, но ...
- Никогда не дублируйте код, который можно использовать повторно.
С этим эмпирическим правилом я могу быстро получить код, и обычно он сходится к уровню детализации, достаточному для удовлетворения потребностей.
Тогда, имея опыт, вы получите четкое представление о глубине, которую вы хотите, чтобы ваши объекты были гранулярными без необходимости постоянно перефакторинг ваших объектов, что отнимает много времени. Однако я обнаружил, что ре-факторинг отнимает много времени, но не так много, как разработка самого проекта с самого начала. Рефакторинг практически неизбежен, поэтому лучше начинать рефакторинг как можно раньше и чаще.
В любом случае ... мои два цента, надеюсь, это поможет.