public Damage ExecuteCalculation( ActorId from, ActorId to, SkillId skillId) { var attacker = actorRepository.Find(from); var victim = actorRepository.Find(to); var skill = skillRepository.Find(skillId); // Build Base Damage attacker.NotifyAttackFactor(attackPowerBuilder); skill.NotifyForceFactor(attackPowerBuilder); var damage = attackPowerBuilder.Build(); var defenseRate = defenseRateBuilder.Build(); damage = damage.Multiply(defenseRate.GenerateRate()); var randomRate = new Rate(random.Random()); damage = damage.Multiply(randomRate); damage = damage.Multiply(damageRate); return(damage); }