Design-patterns para criação de tarefas

3 respostas
F

E aí pessoal!

Eu cheguei a colocar esta dúvida no stackexchange e numa lista de .net mas eu acho que aqui serei melhor compreendido (visto minhas limitações no inglês)

http://programmers.stackexchange.com/questions/246255/design-patterns-for-creating-tasks

Resumidamente, neste sistema em que trabalho, (quase) toda a alteração na entidade envolve em ir na Infra e atualizar "de verdade" posteriormente.

Então quando eu ligo uma Machine, eu marco ela como ligada e crio Tasks (outras entidades) para que sejam consumidas por um windows service.

Atualmente eu uso services para isso, o que deixa meu domínio anêmico:

public void createMachine(string name){
      Machine machine = new Machine(name,Status.Releasing);
      List<Task> tasks = new List<Task>(){
                   new Task("CreateMachine", machine.getName()),                       //infrastructure task
                   new Task("ChangeMachineSize", machine.getName(), machine.getFoo()),      //infrastructure task
                   new Task("ActivateMachine", machine.getBar()),                      //infrastructure task  
                   new Task("SetMachineEntityStatusToReleased", machine.getName())     //business task (go to my database)

      session.save(tasks);
      session.save(machine);
      tx.commit();
     }
   }
Eu gostaria de deixar meu domínio mais rico, mas será que a criação destas tarefas não violaria o SRP?
Public Class Machine{

        public Machine(string name)
        {  
         this. name = name; 
          this.status = Status.Releasing;
          //Can I Create Tasks for create machine here?
        }

        public void Install(){
          setStatus(Status.Releasing);
          //or can I create Tasks for create machine here?
        }

        public void Stop(){
          setStatus(Status.Stopped);
          //Can I create Tasks for stop machine here?
        }


        @Required
        @StringLength(50)
        private String name;

       private  Status status;

}

O código era .net, então pode não estar 100% a sintaxe.

3 Respostas

F

Alguém?

Não sei se eu não me fiz entender. (não que alguém seja obrigado a responder), mas como eu coloquei esta mesma dúvida em três forum diferentes e não obtive retorno, acho que devo estar fazendo a pergunta errada.

Me foi Aconselhado Domain Events, mas achei que ficou um pouco fora do contexto a criação da tarefas em um subscribe, me parece que eu apenas movi o que estava no service para um handler.

Alguém tem usado Domains Events aqui? Acha que deixa o código mais limpo?

F

Caso alguém queira opnar. Ainda não descobri uma boa solução para este caso.

M

Nem sempre optar por um RDM é a melhor opção. Como você mesmo observou o RDM quebra o SRP.

Diria que ambos RDM e ADM são métodos possíveis de implementação que gera código limpo, mas varia de estilo e gosto do desenvolvedor, pois ambos tem vantagens e desvantagens, no RDM voce terá menos classes, tornando o projeto mais simples mas as classes serão mais complexas, no ADM você terá um projeto mais complexo com mais classes, mas classes mais simples.

De uma googada e você vera estes contrastes … qual escolher é de gosto …

Criado 8 de julho de 2014
Ultima resposta 30 de jul. de 2014
Respostas 3
Participantes 2