public void Apply(Guid courseId, Guid userId) { //basic guard clauses if (!_coursesRepository.CourseExists(courseId)) { throw new ArgumentException(); } if (!_userRepository.UserExists(userId)) { throw new ArgumentException(); } var user = _userRepository.FindById(userId); var course = _coursesRepository.FindById(courseId); //this prevents the user from applying multiple times //I could also consider throwing something like UserAlreadyAppliedException in this case if (!CheckIfUserHasAlreadyApplied(user, course)) { course.AppliedUsers.Add(user); } }