public async Task Create(UserAggregate user, ProjectId projectId, ProjectName projectName) { var spec = new IsCanCreateProjectWithNameSpecification(user); if (spec.IsSatisfiedBy(projectName) == false) { throw new InvalidOperationException(String.Join("\n", spec.WhyIsNotSatisfiedBy(projectName))); } var result = await CommandBus.Publish(new CreateCommand(projectId, projectName)); if (result.IsSuccess == false) { throw new InvalidOperationException(result.ToString()); } await user.CreateProject(projectId, projectName); }