Pregunta

Estoy usando MSMQ como una forma de proporcionar SOA asíncrono. Consulte el código a continuación, ya que es bastante difícil de explicar. Estoy tratando de encontrar la mejor manera de hacerlo.

//another method reads off MSMQ and passes the Message into this method
public void ReadMSMQAndAction(Message m)
{
  var e = m.Entity;

  /* this is really bad, but i some how still need some 
   * kind of traffic cop to direct action */
  switch typeof(m.Entity)
    case Order.GetType()
      switch e.Action
        case "SAVE"
          //todo OrderRepo Save
}

//Message gets searlized and put into MSMQ
public class Message<T>
{
  public T Entity { get;set; }

  /* should this be string?
   * or some kind of rule i.e. "ClassName:MethodName" etc? */
  public string Action { get;set; } 
}

public class OrderRepo
{
  public void Save(Order o) { /* todo */ }
  public void Delete(Order o) { /* todo */ }
  public void Update(Order o) { /* todo */ }
}

A medida que el código se vuelve más complejo, será muy difícil de administrar. ¡Cualquier sugerencia es bienvenida!

¿Fue útil?

Solución

Considera el uso de delegados. Le permitirán pasar la llamada de método real al MSMQ para que luego pueda disparar el delegado / acción cuando lo recupere de la cola.

Otros consejos

Use WCF. Microsoft lo ha cerrado para que el servicio (en el sentido de SOA) se presente como una llamada al método, siendo el transporte MSMQ.

El contrato es necesariamente unidireccional, y el hecho de que el transporte sea MSMQ es totalmente incidental para el servicio y su cliente (excepto en la medida en que esta elección obligue a un contrato unidireccional).


En otra nota, me siento obligado a comentar: hasta que pueda expresar clara y sucintamente la intención y la estrategia de implementación, no tiene una idea clara y completa de lo que está creando, y sus posibilidades de éxito son escasas en el mejor de los casos .

El desarrollo de software comienza con tomar los vagos maunderings de los gerentes y vendedores y aplicar el sentido común en su nombre, con ciclos de retroalimentación, hasta que un lado pierda interés, el presupuesto se agote o produzca lo que los patrocinadores del proyecto consideran como un Representación clara y concisa de lo que imaginan que dijeron durante ese primer movimiento de brazo excitado.

Si no puede explicar lo que está haciendo, entonces no sabe lo que está haciendo. Es hora de detenerse y pensar hasta que lo haga.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top