public async Task Store(NaturalPersonDto dto)
        {
            NaturalPerson person = new NaturalPerson(dto.Name, dto.Birthday, dto.Gender);

            StoreAddress(dto, person);
            StoreDocument(dto, person);

            if (!person.Validate())
            {
                NotifyDomainValidations(person.ValidationResult);
            }

            if (!_notifier.HasNotification())
            {
                _naturalPersonRepository.Add(person);
                await _unitOfWork.Commit();
            }
        }
        public async Task Update(NaturalPersonDto dto)
        {
            NaturalPerson person = await _naturalPersonRepository.GetById(dto.Id);

            UpdateNaturalPerson(dto, person);

            await _updateAddressService.Update(person.AddressId, dto.Address);

            await _updateDocumentService.Update(person.DocumentId, dto.Document);

            if (!person.Validate())
            {
                NotifyDomainValidations(person.ValidationResult);
            }

            if (!_notifier.HasNotification())
            {
                _naturalPersonRepository.Update(person);
                await _unitOfWork.Commit();
            }
        }
 private void UpdateNaturalPerson(NaturalPersonDto dto, NaturalPerson person)
 {
     person.UpdateName(dto.Name);
     person.UpdateGender(dto.Gender);
     person.UpdateBirthday(dto.Birthday);
 }
        private void StoreDocument(NaturalPersonDto dto, NaturalPerson person)
        {
            Document document = _storeDocumentService.Store(dto.Document);

            person.AssignDocument(document);
        }
        private void StoreAddress(NaturalPersonDto dto, NaturalPerson person)
        {
            Address address = _storeAddressService.Store(dto.Address);

            person.AssignAddress(address);
        }