Показать сообщение отдельно
Старый 26.06.2018, 13:49
RedHead90 вне форума Посмотреть профиль Отправить личное сообщение для RedHead90 Найти все сообщения от RedHead90
  № 5  
Ответить с цитированием
RedHead90

Регистрация: Apr 2018
Сообщений: 42
Цитата:
Единственное, что пока приходит в голову, это сделать отдельный класс CharacterData для неизменных "справочных" значений и передавать в конструктор каждого экземпляра Character. Но всё равно будет геморрой с созданием наследников CharacterData, плюс в самом Character не обойтись без записей записей типа:

Код AS3:
public function get intelligence() : Number {return _data.intelligence}
Поэтому эффективность такого решения остаётся под вопросом.
А для чего дублировать все поля в Character, если можно дать ему всего один метод чтения

Код AS3:
private var _data:CharacterData;
 
public function get data():CharacterData {
    return _data;
}
Не зацикливайся на наследовании. Очень часто композиция может быть более эффективной. Особенно в играх. Ты уже выделил компонент CharacterData. Попробуй весь класс Character разбить на такие маленькие узкоспециализированные компоненты, а самому Character давать только ссылки на эти компоненты, без каких-либо знаний о них.

Почитай какие-нибудь статьи на тему плюсов и минусов композиции/наследования. Посмотри на Ash. Это довольно простой фреймворк, реализующий шаблон проектирования Entity-Component-System. Он основывается на использовании композиции вместо наследования. Чаще всего применяется именно для создания игр. Изучи принцип, по которому работает данный фреймворк и наверняка ты пересмотришь свои взгляды на многие вещи, касающиеся организации своего кода.