Закон Demeter не имеет смысла в моем случае

Просто выстрел в темноте, но разве для приоритезации потоков в JVM не требуется возможность настраивать приоритет потоков операционной системы?

Linux (и любая Unix-подобная ОС) ограничивает способность придавать процессам более высокий приоритет root. Я думаю, что будет подобное ограничение для потоков.

1
задан Community 23 May 2017 в 10:27
поделиться

1 ответ

Что касается вашего описание и Закон Деметры. Используя пример из Википедии, говорят, что он предпочитает:

void exercise(const Dog& d) { return d.walk(); }

вместо:

void exercise(const Dog& d) { return d.legs.move(); }

Потому что собака должна уметь ходить, а не двигать ногами. Применив это к вашей программе D&D, мы получим что-то вроде, вместо:

bool hit_orc_with_long_sword(const Character& c, int DCValue) {
   return c.D20Abilities.Strength() + d20.roll() > DCValue;
}

Prefer: skill_check (c, MeleeAttack (LongSword (), Orc ());

bool skill_check(const Character& c, const Action& a) {
    return c.attempt(a);
}

//.... in class character:

bool Character::attempt(const Action& a)
{
    return a.check_against(D20Abilities);
}

//.... in class Action:

bool Action::check_against(const D20Abilities& a) {
   return GetRelevantStat(a) + d20.roll() > DCValue;
}

Таким образом, вместо доступа через группы свойств, персонажи знают, как выполнять действия, а действия знают, какова вероятность их успеха с определенными характеристиками. Это разделяет Пользовательский код (например, hit_orc_with_long_sword выше) не должен «указывать» Персонажу, как проверять его силу, он обрабатывается посредством взаимодействия классов, каждый из которых обрабатывает четко определенный домен.

Однако код Представленный образец выглядит так, как будто у него несколько проблем. Когда вы используете friend для чего-либо, кроме реализации определенных операторов, я считаю, что это указывает на проблему дизайна. Вы не должны перебрасывать внутреннее состояние с одного объекта на другой;объекты должны знать, как выполнять набор действий из своего внутреннего состояния и аргументов, переданных им как функции.

2
ответ дан 3 September 2019 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: