{"id":4668,"date":"2023-05-22T11:26:21","date_gmt":"2023-05-22T14:26:21","guid":{"rendered":"https:\/\/elemarjr.com\/clube-de-estudos\/?p=4668"},"modified":"2023-10-21T21:37:41","modified_gmt":"2023-10-22T00:37:41","slug":"event-storming-uma-ferramenta-para-modelagem-de-dominio","status":"publish","type":"artigos","link":"https:\/\/elemarjr.com\/clube-de-estudos\/artigos\/event-storming-uma-ferramenta-para-modelagem-de-dominio\/","title":{"rendered":"Event Storming: uma ferramenta para modelagem de dom\u00ednio"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">O que \u00e9 <em>Event Storming<\/em>?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Defini\u00e7\u00e3o de<em> Event Storming<\/em><\/h3>\n\n\n\n<p>O <em>Event Storming<\/em> \u00e9 uma t\u00e9cnica de modelagem de dom\u00ednio que envolve a explora\u00e7\u00e3o colaborativa e o entendimento de um dom\u00ednio espec\u00edfico de neg\u00f3cio.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Import\u00e2ncia do <em>Event Storming<\/em><\/h3>\n\n\n\n<p>Sua import\u00e2ncia se d\u00e1 pelo fato de que ele permite que as equipes entendam o fluxo de neg\u00f3cios, identifiquem problemas e descubram oportunidades de inova\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como funciona o <em>Event Storming<\/em>?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Passos b\u00e1sicos do <em>Event Storming<\/em><\/h3>\n\n\n\n<p>A t\u00e9cnica envolve uma sess\u00e3o de <em>brainstorming<\/em>, na qual os participantes mapeiam eventos, comandos e agregados em um espa\u00e7o f\u00edsico ou virtual.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ferramentas usadas no <em>Event Storming<\/em><\/h3>\n\n\n\n<p>Os participantes utilizam <em>post-its<\/em> de cores diferentes para representar diferentes elementos do dom\u00ednio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><em>Event Storming<\/em> e <em>Domain-Driven Design<\/em><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Como eles se complementam<\/h3>\n\n\n\n<p>O <em>Event Storming<\/em> se alinha perfeitamente com o <em>Domain-Driven Design (DDD)<\/em>, pois ambos buscam entender a l\u00f3gica de neg\u00f3cios.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Benef\u00edcios da integra\u00e7\u00e3o<\/h3>\n\n\n\n<p>A combina\u00e7\u00e3o dessas duas t\u00e9cnicas pode resultar em uma compreens\u00e3o mais profunda do dom\u00ednio e na identifica\u00e7\u00e3o de poss\u00edveis melhorias.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Aplicando <em>Event Storming<\/em> em neg\u00f3cios<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Casos de uso<\/h3>\n\n\n\n<p>O <em>Event Storming<\/em> pode ser aplicado em diversas situa\u00e7\u00f5es, como o desenvolvimento de novos produtos, a melhoria de processos existentes e a resolu\u00e7\u00e3o de problemas de neg\u00f3cios.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplos pr\u00e1ticos<\/h3>\n\n\n\n<p>Por exemplo, em uma empresa de log\u00edstica, o <em>Event Storming<\/em> pode ser usado para mapear e otimizar o fluxo de entrega de mercadorias.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de implementa\u00e7\u00e3o em C#<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">C#<\/span><span role=\"button\" tabindex=\"0\" data-code=\"using System;\n\n\/\/ Definindo eventos relacionados \u00e0 entrega de mercadorias\npublic enum Event\n{\n    MERCADORIA_ENTREGUE,\n    MERCADORIA_PERDIDA,\n    MERCADORIA_ATRASADA\n}\n\n\/\/ Definindo comandos relacionados \u00e0 entrega de mercadorias\npublic enum Command\n{\n    INICIAR_ENTREGA,\n    REGISTRAR_PERDA,\n    REGISTRAR_ATRASO\n}\n\n\/\/ Definindo o agregado relacionado \u00e0 entrega de mercadorias\npublic class DeliveryAggregate\n{\n    public string Status { get; private set; }\n\n    public DeliveryAggregate()\n    {\n        Status = &quot;pendente&quot;;\n    }\n\n    public void ApplyEvent(Event @event)\n    {\n        if (@event == Event.MERCADORIA_ENTREGUE)\n            Status = &quot;entregue&quot;;\n        else if (@event == Event.MERCADORIA_PERDIDA)\n            Status = &quot;perdida&quot;;\n        else if (@event == Event.MERCADORIA_ATRASADA)\n            Status = &quot;atrasada&quot;;\n    }\n\n    public void ProcessCommand(Command command)\n    {\n        if (command == Command.INICIAR_ENTREGA)\n            ApplyEvent(Event.MERCADORIA_ENTREGUE);\n        else if (command == Command.REGISTRAR_PERDA)\n            ApplyEvent(Event.MERCADORIA_PERDIDA);\n        else if (command == Command.REGISTRAR_ATRASO)\n            ApplyEvent(Event.MERCADORIA_ATRASADA);\n    }\n}\n\n\/\/ Exemplo de utiliza\u00e7\u00e3o do Event Storming\nclass Program\n{\n    static void Main(string[] args)\n    {\n        \/\/ Criando uma inst\u00e2ncia do agregado de entrega de mercadorias\n        DeliveryAggregate delivery = new DeliveryAggregate();\n\n        \/\/ Simulando eventos ocorridos no processo de entrega\n        Event[] events = {\n            Event.MERCADORIA_ENTREGUE,\n            Event.MERCADORIA_ATRASADA,\n            Event.MERCADORIA_PERDIDA\n        };\n\n        \/\/ Aplicando os eventos no agregado\n        foreach (Event @event in events)\n        {\n            delivery.ApplyEvent(@event);\n        }\n\n        \/\/ Verificando o status final da entrega\n        Console.WriteLine($&quot;Status da entrega: {delivery.Status}&quot;);\n    }\n}\n\n\/\/ Fonte: ChatGPT\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> System<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Definindo eventos relacionados \u00e0 entrega de mercadorias<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">enum<\/span><span style=\"color: #D8DEE9FF\"> Event<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    MERCADORIA_ENTREGUE<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    MERCADORIA_PERDIDA<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    MERCADORIA_ATRASADA<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Definindo comandos relacionados \u00e0 entrega de mercadorias<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">enum<\/span><span style=\"color: #D8DEE9FF\"> Command<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    INICIAR_ENTREGA<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    REGISTRAR_PERDA<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    REGISTRAR_ATRASO<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Definindo o agregado relacionado \u00e0 entrega de mercadorias<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">DeliveryAggregate<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> Status <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">get;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">set;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">DeliveryAggregate<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">Status<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">pendente<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">ApplyEvent<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Event @event<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">@event<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_ENTREGUE<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #D8DEE9\">Status<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">entregue<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">@event<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_PERDIDA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #D8DEE9\">Status<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">perdida<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">@event<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_ATRASADA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #D8DEE9\">Status<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">atrasada<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">ProcessCommand<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Command command<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">command<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Command<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">INICIAR_ENTREGA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #88C0D0\">ApplyEvent<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_ENTREGUE<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">command<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Command<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">REGISTRAR_PERDA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #88C0D0\">ApplyEvent<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_PERDIDA<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">command<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Command<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">REGISTRAR_ATRASO<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #88C0D0\">ApplyEvent<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_ATRASADA<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Exemplo de utiliza\u00e7\u00e3o do Event Storming<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Program<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Main<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">[]<\/span><span style=\"color: #D8DEE9FF\"> args<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Criando uma inst\u00e2ncia do agregado de entrega de mercadorias<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        DeliveryAggregate delivery <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> DeliveryAggregate<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Simulando eventos ocorridos no processo de entrega<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        Event<\/span><span style=\"color: #ECEFF4\">[]<\/span><span style=\"color: #D8DEE9FF\"> events <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_ENTREGUE<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_ATRASADA<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_PERDIDA<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Aplicando os eventos no agregado<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">foreach<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Event @event <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">events<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #D8DEE9\">delivery<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ApplyEvent<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">@event<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Verificando o status final da entrega<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">Console<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">WriteLine<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">$&quot;<\/span><span style=\"color: #A3BE8C\">Status da entrega: <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9\">delivery<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Status<\/span><span style=\"color: #ECEFF4\">}&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Fonte: ChatGPT<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Neste exemplo em C#, as enumera\u00e7\u00f5es <code>Event<\/code> e <code>Command<\/code> s\u00e3o usadas para representar os eventos e comandos relacionados \u00e0 entrega de mercadorias. A classe <code>DeliveryAggregate<\/code> representa o estado da entrega e possui m\u00e9todos para aplicar eventos e processar comandos. No m\u00e9todo <code>Main<\/code>, simulamos uma s\u00e9rie de eventos ocorridos no processo de entrega e, em seguida, exibimos o status final da entrega.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de implementa\u00e7\u00e3o em Java<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Java<\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/\/ Definindo eventos relacionados \u00e0 entrega de mercadorias\nenum Event {\n    MERCADORIA_ENTREGUE,\n    MERCADORIA_PERDIDA,\n    MERCADORIA_ATRASADA\n}\n\n\/\/ Definindo comandos relacionados \u00e0 entrega de mercadorias\nenum Command {\n    INICIAR_ENTREGA,\n    REGISTRAR_PERDA,\n    REGISTRAR_ATRASO\n}\n\n\/\/ Definindo o agregado relacionado \u00e0 entrega de mercadorias\nclass DeliveryAggregate {\n    private String status;\n\n    public DeliveryAggregate() {\n        status = &quot;pendente&quot;;\n    }\n\n    public void applyEvent(Event event) {\n        if (event == Event.MERCADORIA_ENTREGUE)\n            status = &quot;entregue&quot;;\n        else if (event == Event.MERCADORIA_PERDIDA)\n            status = &quot;perdida&quot;;\n        else if (event == Event.MERCADORIA_ATRASADA)\n            status = &quot;atrasada&quot;;\n    }\n\n    public void processCommand(Command command) {\n        if (command == Command.INICIAR_ENTREGA)\n            applyEvent(Event.MERCADORIA_ENTREGUE);\n        else if (command == Command.REGISTRAR_PERDA)\n            applyEvent(Event.MERCADORIA_PERDIDA);\n        else if (command == Command.REGISTRAR_ATRASO)\n            applyEvent(Event.MERCADORIA_ATRASADA);\n    }\n\n    public String getStatus() {\n        return status;\n    }\n}\n\n\/\/ Exemplo de utiliza\u00e7\u00e3o do Event Storming\npublic class Main {\n    public static void main(String[] args) {\n        \/\/ Criando uma inst\u00e2ncia do agregado de entrega de mercadorias\n        DeliveryAggregate delivery = new DeliveryAggregate();\n\n        \/\/ Simulando eventos ocorridos no processo de entrega\n        Event[] events = {\n                Event.MERCADORIA_ENTREGUE,\n                Event.MERCADORIA_ATRASADA,\n                Event.MERCADORIA_PERDIDA\n        };\n\n        \/\/ Aplicando os eventos no agregado\n        for (Event event : events) {\n            delivery.applyEvent(event);\n        }\n\n        \/\/ Verificando o status final da entrega\n        System.out.println(&quot;Status da entrega: &quot; + delivery.getStatus());\n    }\n}\n\n\/\/Fonte: ChatGPT\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/ Definindo eventos relacionados \u00e0 entrega de mercadorias<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">enum<\/span><span style=\"color: #D8DEE9FF\"> Event <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">MERCADORIA_ENTREGUE<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">MERCADORIA_PERDIDA<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">MERCADORIA_ATRASADA<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Definindo comandos relacionados \u00e0 entrega de mercadorias<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">enum<\/span><span style=\"color: #D8DEE9FF\"> Command <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">INICIAR_ENTREGA<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">REGISTRAR_PERDA<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">REGISTRAR_ATRASO<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Definindo o agregado relacionado \u00e0 entrega de mercadorias<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">DeliveryAggregate<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">String<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">status<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">DeliveryAggregate<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        status <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">pendente<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">applyEvent<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB\">Event<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">event<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">event <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_ENTREGUE<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            status <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">entregue<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">event <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_PERDIDA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            status <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">perdida<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">event <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_ATRASADA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            status <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">atrasada<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">processCommand<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB\">Command<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">command<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">command <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Command<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">INICIAR_ENTREGA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #88C0D0\">applyEvent<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_ENTREGUE<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">command <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Command<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">REGISTRAR_PERDA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #88C0D0\">applyEvent<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_PERDIDA<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">command <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Command<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">REGISTRAR_ATRASO<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #88C0D0\">applyEvent<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_ATRASADA<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">String<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">getStatus<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> status<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Exemplo de utiliza\u00e7\u00e3o do Event Storming<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Main<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">main<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB\">String<\/span><span style=\"color: #ECEFF4\">[]<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">args<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Criando uma inst\u00e2ncia do agregado de entrega de mercadorias<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">DeliveryAggregate<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">delivery<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">DeliveryAggregate<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Simulando eventos ocorridos no processo de entrega<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">Event<\/span><span style=\"color: #ECEFF4\">[]<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">events<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_ENTREGUE<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_ATRASADA<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MERCADORIA_PERDIDA<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Aplicando os eventos no agregado<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB\">Event<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">event<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> events<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #D8DEE9\">delivery<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">applyEvent<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">event<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Verificando o status final da entrega<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">out<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">println<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Status da entrega: <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">delivery<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getStatus<\/span><span style=\"color: #ECEFF4\">())<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/Fonte: ChatGPT<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Neste exemplo em Java, as enumera\u00e7\u00f5es <code>Event<\/code> e <code>Command<\/code> s\u00e3o utilizadas para representar os eventos e comandos relacionados \u00e0 entrega de mercadorias. A classe <code>DeliveryAggregate<\/code> representa o estado da entrega e possui m\u00e9todos para aplicar eventos e processar comandos. No m\u00e9todo <code>main<\/code>, simulamos uma s\u00e9rie de eventos ocorridos no processo de entrega e, em seguida, exibimos o status final da entrega.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de implementa\u00e7\u00e3o em Python<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Python<\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Importando a biblioteca para manipula\u00e7\u00e3o de eventos\nfrom enum import Enum\n\n# Definindo eventos relacionados \u00e0 entrega de mercadorias\nclass Event(Enum):\n    MERCADORIA_ENTREGUE = 'mercadoria_entregue'\n    MERCADORIA_PERDIDA = 'mercadoria_perdida'\n    MERCADORIA_ATRASADA = 'mercadoria_atrasada'\n\n# Definindo comandos relacionados \u00e0 entrega de mercadorias\nclass Command(Enum):\n    INICIAR_ENTREGA = 'iniciar_entrega'\n    REGISTRAR_PERDA = 'registrar_perda'\n    REGISTRAR_ATRASO = 'registrar_atraso'\n\n# Definindo o agregado relacionado \u00e0 entrega de mercadorias\nclass DeliveryAggregate:\n    def __init__(self):\n        self.status = 'pendente'\n    \n    def apply_event(self, event):\n        if event == Event.MERCADORIA_ENTREGUE:\n            self.status = 'entregue'\n        elif event == Event.MERCADORIA_PERDIDA:\n            self.status = 'perdida'\n        elif event == Event.MERCADORIA_ATRASADA:\n            self.status = 'atrasada'\n    \n    def process_command(self, command):\n        if command == Command.INICIAR_ENTREGA:\n            self.apply_event(Event.MERCADORIA_ENTREGUE)\n        elif command == Command.REGISTRAR_PERDA:\n            self.apply_event(Event.MERCADORIA_PERDIDA)\n        elif command == Command.REGISTRAR_ATRASO:\n            self.apply_event(Event.MERCADORIA_ATRASADA)\n\n# Exemplo de utiliza\u00e7\u00e3o do Event Storming\ndef main():\n    # Criando uma inst\u00e2ncia do agregado de entrega de mercadorias\n    delivery = DeliveryAggregate()\n\n    # Simulando eventos ocorridos no processo de entrega\n    events = [\n        Event.MERCADORIA_ENTREGUE,\n        Event.MERCADORIA_ATRASADA,\n        Event.MERCADORIA_PERDIDA\n    ]\n\n    # Aplicando os eventos no agregado\n    for event in events:\n        delivery.apply_event(event)\n\n    # Verificando o status final da entrega\n    print(f'Status da entrega: {delivery.status}')\n\nif __name__ == '__main__':\n    main()\n\n# Fonte: ChatGPT\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #616E88\"># Importando a biblioteca para manipula\u00e7\u00e3o de eventos<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> enum <\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> Enum<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Definindo eventos relacionados \u00e0 entrega de mercadorias<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Event<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB; font-weight: bold\">Enum<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    MERCADORIA_ENTREGUE <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">mercadoria_entregue<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    MERCADORIA_PERDIDA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">mercadoria_perdida<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    MERCADORIA_ATRASADA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">mercadoria_atrasada<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Definindo comandos relacionados \u00e0 entrega de mercadorias<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Command<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB; font-weight: bold\">Enum<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    INICIAR_ENTREGA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">iniciar_entrega<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    REGISTRAR_PERDA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">registrar_perda<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    REGISTRAR_ATRASO <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">registrar_atraso<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Definindo o agregado relacionado \u00e0 entrega de mercadorias<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">DeliveryAggregate<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">__init__<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">status <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">pendente<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">apply_event<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">event<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> event <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">MERCADORIA_ENTREGUE<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">status <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">entregue<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">elif<\/span><span style=\"color: #D8DEE9FF\"> event <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">MERCADORIA_PERDIDA<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">status <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">perdida<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">elif<\/span><span style=\"color: #D8DEE9FF\"> event <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">MERCADORIA_ATRASADA<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">status <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">atrasada<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">process_command<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">command<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> command <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> Command<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">INICIAR_ENTREGA<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">apply_event<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">MERCADORIA_ENTREGUE<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">elif<\/span><span style=\"color: #D8DEE9FF\"> command <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> Command<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">REGISTRAR_PERDA<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">apply_event<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">MERCADORIA_PERDIDA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">elif<\/span><span style=\"color: #D8DEE9FF\"> command <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> Command<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">REGISTRAR_ATRASO<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">apply_event<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">MERCADORIA_ATRASADA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Exemplo de utiliza\u00e7\u00e3o do Event Storming<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">main<\/span><span style=\"color: #ECEFF4\">():<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\"># Criando uma inst\u00e2ncia do agregado de entrega de mercadorias<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    delivery <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">DeliveryAggregate<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\"># Simulando eventos ocorridos no processo de entrega<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    events <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">MERCADORIA_ENTREGUE<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">MERCADORIA_ATRASADA<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        Event<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">MERCADORIA_PERDIDA<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\"># Aplicando os eventos no agregado<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> event <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> events<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        delivery<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">apply_event<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">event<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\"># Verificando o status final da entrega<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">f<\/span><span style=\"color: #A3BE8C\">&#39;Status da entrega: <\/span><span style=\"color: #EBCB8B\">{<\/span><span style=\"color: #D8DEE9FF\">delivery<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">status<\/span><span style=\"color: #EBCB8B\">}<\/span><span style=\"color: #A3BE8C\">&#39;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> __name__ <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">__main__<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">main<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Fonte: ChatGPT<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Neste exemplo, utilizamos enums (<code>Event<\/code> e <code>Command<\/code>) para representar os eventos e comandos relacionados \u00e0 entrega de mercadorias. O agregado <code>DeliveryAggregate<\/code> representa o estado da entrega e cont\u00e9m m\u00e9todos para aplicar eventos e processar comandos. No exemplo <code>main()<\/code>, simulamos uma s\u00e9rie de eventos ocorridos no processo de entrega e, em seguida, verificamos o status final da entrega.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Os desafios do <em>Event Storming<\/em><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Dificuldades comuns<\/h3>\n\n\n\n<p>Alguns desafios podem surgir ao implementar o <em>Event Storming<\/em>, como a resist\u00eancia da equipe e a complexidade do dom\u00ednio.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Como superar esses desafios<\/h3>\n\n\n\n<p>O sucesso do <em>Event Storming<\/em> depende do envolvimento de todos os <em>stakeholders<\/em> e de uma lideran\u00e7a eficaz.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Por que as empresas deveriam adotar o <em>Event Storming<\/em>?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Vantagens competitivas<\/h3>\n\n\n\n<p>O <em>Event Storming<\/em> proporciona vantagens competitivas ao permitir uma compreens\u00e3o mais profunda do neg\u00f3cio e a identifica\u00e7\u00e3o de oportunidades de inova\u00e7\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Benef\u00edcios a longo prazo<\/h3>\n\n\n\n<p>Os benef\u00edcios a longo prazo incluem uma melhor colabora\u00e7\u00e3o entre as equipes, processos de neg\u00f3cios mais eficientes e produtos de maior qualidade.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>O <em>Event Storming<\/em> \u00e9 uma t\u00e9cnica poderosa que, quando bem aplicada, pode trazer <em>insights<\/em> valiosos sobre o dom\u00ednio de neg\u00f3cio. Ele \u00e9 mais do que uma ferramenta t\u00e9cnica; \u00e9 uma maneira de conectar pessoas, ideias e neg\u00f3cios.<\/p>\n\n\n\n<p>Esse conte\u00fado \u00e9 parte do material disponibilizado para os participantes do meu grupo de estudos de\u00a0<strong>DDD do Jeito Certo<\/strong>. Voc\u00ea quer participar desse grupo?\u00a0<strong><a href=\"https:\/\/elemarjr.com\/clube-de-estudos\/ddd-do-jeito-certo\/\">Clique aqui e veja como funciona<\/a><\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00favidas Frequentes<\/h2>\n\n\n\n<p><strong>O que \u00e9 <em>Event Storming<\/em>?<\/strong><br>O <em>Event Storming<\/em> \u00e9 uma t\u00e9cnica de modelagem de dom\u00ednio que permite a explora\u00e7\u00e3o colaborativa e o entendimento de um dom\u00ednio espec\u00edfico de neg\u00f3cios. \u00c9 um processo que envolve mapear eventos, comandos e agregados, a fim de compreender melhor o fluxo de neg\u00f3cios, identificar problemas e descobrir oportunidades de inova\u00e7\u00e3o.<\/p>\n\n\n\n<p><strong>Como funciona o <em>Event Storming<\/em>?<\/strong><br>O <em>Event Storming<\/em> funciona atrav\u00e9s de sess\u00f5es de brainstorming nas quais os participantes mapeiam os eventos de neg\u00f3cios usando post-its de cores diferentes para representar diferentes elementos do dom\u00ednio. O objetivo \u00e9 criar uma representa\u00e7\u00e3o visual do fluxo de eventos de neg\u00f3cios, o que facilita a identifica\u00e7\u00e3o de problemas e oportunidades.<\/p>\n\n\n\n<p><strong>Por que usar <em>Event Storming<\/em> e <em>Domain-Driven Design<\/em> juntos?<\/strong><br>O <em>Event Storming<\/em> e o <em>Domain-Driven Design<\/em> se complementam porque ambos buscam entender a l\u00f3gica de neg\u00f3cios de uma organiza\u00e7\u00e3o. O <em>Event Storming<\/em> ajuda a mapear e visualizar o fluxo de eventos de neg\u00f3cios, enquanto o <em>Domain-Driven Design<\/em> se concentra no desenvolvimento de software que reflete essa l\u00f3gica de neg\u00f3cios. A combina\u00e7\u00e3o dessas duas t\u00e9cnicas pode resultar em uma compreens\u00e3o mais profunda do dom\u00ednio e na identifica\u00e7\u00e3o de poss\u00edveis melhorias.<\/p>\n\n\n\n<p><strong>Quais s\u00e3o os desafios do <em>Event Storming<\/em>?<\/strong><br>Alguns dos desafios do <em>Event Storming<\/em> incluem a resist\u00eancia de membros da equipe, a dificuldade em mapear dom\u00ednios complexos e a necessidade de envolvimento ativo de todos os <em>stakeholders<\/em>. Para superar esses desafios, \u00e9 importante garantir que todos os participantes entendam o valor do <em>Event Storming<\/em> e estejam comprometidos com o processo.<\/p>\n\n\n\n<p><strong>Por que as empresas deveriam adotar o <em>Event Storming<\/em>?<\/strong><br>As empresas podem se beneficiar do <em>Event Storming<\/em> de v\u00e1rias maneiras. Ele pode proporcionar uma compreens\u00e3o mais profunda do neg\u00f3cio, identificar oportunidades de inova\u00e7\u00e3o e melhorar a colabora\u00e7\u00e3o entre equipes. Al\u00e9m disso, o <em>Event Storming<\/em> pode ajudar a identificar problemas e inefici\u00eancias nos fluxos de neg\u00f3cios, levando a processos mais eficientes e produtos de maior qualidade.<\/p>\n","protected":false},"featured_media":4686,"parent":0,"template":"","cursos":[12],"class_list":["post-4668","artigos","type-artigos","status-publish","has-post-thumbnail","hentry","cursos-ddd-do-jeito-certo"],"acf":[],"_links":{"self":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos\/4668","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos"}],"about":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/types\/artigos"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media\/4686"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media?parent=4668"}],"wp:term":[{"taxonomy":"cursos","embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/cursos?post=4668"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}