Я считаю, что критерии могут быть выведены из четкого определения, что такое абстракция.
Вы имеете в виду абстракцию в рамках парадигмы объектно-ориентированного программирования, где в вашем распоряжении три принципа: 'абстракция' - 'инкапсуляция' - 'скрытие или видимость информации' .
Абстракция - это процесс выбора того, какие атрибуты объекта имеют отношение к вашей системе, а какие следует полностью игнорировать.
Это означает, что предел абстракции касается не столько число концепций, которые вы определяете (игрок, оружие, пули, ...), но того, что вы решите поместить внутри эти понятия.
Это в основном сортировка , где вы будете рассматривать только из концепции, что полезно для услуг, которые вам нужно определить.
Итак, хорошим критерием для начала написания вменяемого кода могут быть API , как подсказывает программа eclipse: API first .
Действительно, «Хорошие API требуют итерации проектирования», то есть список объектов, которые вы упомянули в своем вопросе, будет уточняться, так как необходимый API сам по себе уточняется.
Кроме того, API подразумевают наличие четко определенных границ и зависимостей компонентов (как в «Core - Player - vs. UI - RenderableObject -»), то есть очень подробный список, который вы упоминаете, нельзя рассматривать как длинный бесконечный список концепции, но должны быть четко сгруппированы в различные функциональные периметры (или функциональные компоненты) из аппликативной архитектуры.
Поскольку API существуют для удовлетворения потребностей клиентов, вы сохраните эти объекты только потому, что они имеют смысл для клиента. Другие объекты должны быть во «внутренних» пакетах и никогда не должны передаваться напрямую какими-либо другими частями вашего приложения.
Имея это в виду, @ phjr советы имеют смысл;)