Я играю в ролевую игру просто для удовольствия и больше узнаю о принципах SOLID. Одна из первых вещей, на которых я сосредотачиваюсь, - SRP. У меня есть класс "Персонаж", который представляет персонажа в игре. У него есть такие вещи, как "Имя", "Здоровье", "Мана", "Возможности" и т.д.
Теперь, обычно, я бы также поместил методы в свой класс символов, чтобы он выглядел примерно так...
public class Character
{
public string Name { get; set; }
public int Health { get; set; }
public int Mana { get; set; }
public Dictionary<AbilityScoreEnum, int>AbilityScores { get; set; }
// base attack bonus depends on character level, attribute bonuses, etc
public static void GetBaseAttackBonus();
public static int RollDamage();
public static TakeDamage(int amount);
}
Но из-за SRP я решил перевести все методы в отдельный класс. Я назвал этот класс "CharacterActions", и теперь подписи метода выглядят так:
public class CharacterActions
{
public static void GetBaseAttackBonus(Character character);
public static int RollDamage(Character character);
public static TakeDamage(Character character, int amount);
}
Обратите внимание, что теперь мне нужно включить объект Character, который я использую во всех моих методах CharacterActions. Правильно ли это подходит для использования SRP? Это, похоже, полностью противоречит концепции инкапсуляции ООП.
Или я делаю что-то совершенно неправильное здесь?
ОДНА вещь, о которой я люблю, это то, что мой класс символов очень ясен в том, что он делает, он просто представляет объект Character.