1

我使用 MSMQ 作为提供异步 SOA 的一种方式。请参考下面的代码,因为它很难解释。我试图找出最好的方法来做到这一点。

//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 */ }
}

随着代码变得越来越复杂,将很难管理。欢迎任何建议!

4

2 回答 2

1

研究使用代表。它们将允许您将实际的方法调用传递到 MSMQ,以便您可以在从队列中检索委托/操作时触发它。

于 2009-03-11T08:27:56.683 回答
0

使用 WCF。Microsoft 已将其包装起来,以便服务(在 SOA 的意义上)呈现为方法调用,传输是 MSMQ。

契约必然是一种方式,而传输恰好是 MSMQ 的事实完全是服务及其客户端的附带条件(除非这种选择强制采用一种方式契约)。


另一方面,我觉得有必要评论一下:除非你能清楚简洁地表达意图和实施策略,否则你对你正在创造的东西没有一个清晰和完整的想法,你成功的机会充其量是渺茫的。

软件开发始于对管理人员和销售人员的模糊理解,并代表他们应用常识,循环反馈,直到一方失去兴趣,预算用完,或者你生产出项目发起人认为清晰简洁的东西他们想象他们在第一次兴奋的手臂挥动时所说的话。

如果你不能解释你在做什么,那么你就不知道你在做什么。是时候停下来思考了,直到你这样做。

于 2009-03-11T08:54:35.463 回答