События 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”