Рубрики
Без рубрики

События домена eComoTor nero Я Развязываю Что-То Реальное.

Доменное событие-это одна из самых важных проблем, с которыми мы сталкиваемся… Помеченный как ddd, архитектура, java.

События domain-это tatica подошел по Domain Driven Design(DDD) с siempre, но понимаю, что многие разработчики недооценивают возможности, что событие домена, нужно сделать ваше программное обеспечение, менее связаны, с простой и обязанности четко определены.

Некоторые разработчики даже говорят, что это форма работы очень сложные быть реализована и что делает обеспечения длительной работы.

Сегодня я покажу, как все это может быть реализовано простым способом и выполнять обещания, данные выше.

Событие домена-это абстракция событие, которое произошло. Он всегда будет сформирована и уведомлен через регистратор событий, что в свою очередь позволит “доставить” это событие для тех, кто заинтересован, чтобы услышать его, то есть обработчики событий(listeners).

Прежде чем продолжить, я покажу каждый из этих стандартов, упомянутых для начала посмотрим, как все это реализовано и, как может быть использована в приложении. Мы используем Java 8 и Spring Boot 2.2.2, полный код это в моем GitHub .

Я буду использовать в качестве примера вымышленный контекст, отвечает за управление и сохраняется регистраций людей.

Это-абстракция события домена, где будет загружать данные, которые они имеют смысл для вас. Рекомендую, что момент возникновения всегда присутствует в этой абстракции, которые удается организовать в хронологическом порядке события, особенно если они будут останавливаться на mensageiria.

public abstract class EventoDeDominio extends ApplicationEvent {

    private LocalDateTime data;

    public EventoDeDominio(Object source, LocalDateTime data) {
        super(source);
        this.data = data;
    }

    public LocalDateTime getData() {
        return data;
    }
}

Итак, событие само по себе, выглядит это так.

public class NomeDaPessoaAlterado extends EventoDeDominio {

    private String nomeAntigo;
    private String nomeAtual;

    public NomeDaPessoaAlterado(Object source, LocalDateTime data, String nomeAntigo, String nomeAtual) {
        super(source, data);
        this.nomeAntigo = nomeAntigo;
        this.nomeAtual = nomeAtual;
    }

    public String getNomeAntigo() {
        return nomeAntigo;
    }

    public String getNomeAtual() {
        return nomeAtual;
    }
}

Поскольку я использую Spring Boot он уже протягивает мне готовой реализация регистратор событий, которые класс ApplicationEventPublisher. В основном, когда мы говорим этого notifier, где начинают реализации сложных и зачастую pattern сложнее, чем другую, без необходимости. С помощью этой программы на моем уровне приложения, я запускаю действие изменить человека, и если успешно notifico событие NomeDaPessoaAlterado.

@Service
public class AtualizaPessoa {

    private PessoaRepositorio pessoaRepositorio;
    private ApplicationEventPublisher applicationEventPublisher;

    @Autowired
    public AtualizaPessoa(PessoaRepositorio pessoaRepositorio, ApplicationEventPublisher applicationEventPublisher) {
        this.pessoaRepositorio = pessoaRepositorio;
        this.applicationEventPublisher = applicationEventPublisher;
    }

    public void atualizarNome(PessoaDto pessoaDto) throws Exception {
        Pessoa pessoa = pessoaRepositorio.findById(pessoaDto.id).get();
        NomeDaPessoaAlterado nomeDaPessoaAlterado = new NomeDaPessoaAlterado(this, LocalDateTime.now(),
            pessoa.getNome(),
            pessoaDto.nome);
        pessoa.alterarNome(pessoaDto.nome);
        pessoaRepositorio.save(pessoa);
        applicationEventPublisher.publishEvent(nomeDaPessoaAlterado);
    }
}

С момента, когда у нас есть событие, уведомлен, нам просто нужно создать обработчик(es) заинтересованы в этом мероприятии в слой нашей инфраструктуры, чтобы можно было извлечь бизнес-правил, которые не входят в ответственность службы изменить.

@Component
public class ManipuladorDeNomeDaPessoaAlterado implements ApplicationListener {
    @Override
    public void onApplicationEvent(NomeDaPessoaAlterado nomeDaPessoaAlterado) {
        System.out.println("Evento Pessoa alterada");
        System.out.println(nomeDaPessoaAlterado.getData().toString());
        System.out.println(nomeDaPessoaAlterado.getNomeAntigo());
        System.out.println(nomeDaPessoaAlterado.getNomeAtual());
    }
}

С этого момента я desacoplo другие бизнес-правила, которые окружают действие изменить Человека, его ответственность единственной и исключительной службы AtualizaPessoa проведения update сущности Человека в банке.

События домена, вы получите полный перечень услуг, чтобы сделать код, ит и связи простые и desacoplados. Они позволяют сложностей, связанных /другие бизнес-правил, реализуются в другое время, что делает код, действие, это выполняется на ответственность хорошо ограниченной .

Как в примере выше, команда на данный момент является только изменение данных Сущности, Человек, если мои бизнес-правила, говорит, что я должен, например сохранить журнал событий или обновить другие данные других Лиц, в данный момент, что изменение происходит, эти сложности могут быть реализованы отдельно, и, следовательно, вы будете зарабатывать развязки, простота тестирования, и лучший контроль транзакций(транзакций).

Такая тактика позволяет его бизнес-правила может развиваться бесконечно, не просто действие, изменение данных в реестр, как, например, взрывается размер трансфер изменение, если это изменение он должен строго, однозначно, есть, что есть изменения в реестр, и больше ничего.

Наконец, еще одно преимущество этого подхода в том, что она позволяет начать извлекать контекст монолитные системы постепенно, таким образом, что постепенно бизнес-правила, касающиеся контекст, который требуется извлечь, чтобы начать выполнение в другом месте.

Оригинал: “https://dev.to/diegopaniago/eventos-de-dominio-e-como-tornar-o-desacoplamento-algo-real-5e96”