大家讨论一下这个图如何设计程序。

1:需求:                                                                                       新闻、体育、博客等频道在某种情况下异步向MessageQueue里发送Message,我们通过windos service,把Messages Receive后,通过一定的Process,生成我们想要的文本格式或者html格式通过Email/MMS/MSN等发送给客户。

2:图解

 

3:变化点

  >Message的body是变化的。blogs,sports,news他们的信息的属性肯定是有区别的。

  >Process的过程是变化的。因为Email,MMS,MSN接受的格式不一样。所以Process出来的格式应该也不一样

  >同一个发送渠道,比如Email发送给消费者、商家也是不一样的。这也是个变化点。

4:如何进行 重构,使他们之间的耦合性降低呢。大家讨论讨论。

 

posted @ 2008-07-04 22:12 Robot·H 阅读(561) 评论(18)  编辑 收藏 所属分类: C#2.0

  回复  引用  查看    
#1楼 2008-07-04 22:21 | Justin      
最简单能想到的,观察者,工厂

btw1:不欣赏lz在首页直接放这种帖子的做法!
btw2:最近首页太乱套了!大家应该自觉一点!
  回复  引用  查看    
#2楼 [楼主]2008-07-04 22:26 | Robot·H      
@Justin
以前首页都是些很经典的东东。今天我弄个这样的玩意大家换个口味啊!
如果感觉不合适。我就Cancel了。

  回复  引用    
#3楼 2008-07-04 22:31 | gamespot [未注册用户]
这个不难吧 web services
  回复  引用  查看    
#4楼 [楼主]2008-07-04 22:34 | Robot·H      
@gamespot
对于News,Sports,Blogs,我们假设是三个大的部门。
我们固然可以通过WebServices让这三个部门调用我们的接口进行Send
Message.
请注意变化点、ls上还可以想想有什么变化点。
用什么设计模式比较好。


  回复  引用  查看    
#5楼 2008-07-04 22:40 | 横刀天笑      
如何进行重构Reflactor...............
--------------------------------
不明白重构和Reflactor有什么关系?Refactoring?

观察者,策略,桥接,可能还有些地方用到模板方法
  回复  引用  查看    
#6楼 2008-07-05 07:12 | Bēniaǒ      
@Robot·H
消息只是类型不同,接口应该是相同的,可以抽象
public interface IMessage
{
void Send(message);
}
消息有三种,而类型不一样,也可以抽象吧!可以使用策略模式来实现,依赖抽象。可以参考下PetShop 4.0里的设计,或我这篇文章,或许对你有些帮助。
ASP.NET中进行消息处理(MSMQ) 三
http://www.cnblogs.com/beniao/archive/2008/07/04/1234352.html
  回复  引用  查看    
#7楼 [楼主]2008-07-05 10:35 | Robot·H      
@Bēniaǒ
您好!,方便的话加一下的我的联系方式吧。
qq:283984419
msn:glory_yimart@hotmail.com

  回复  引用  查看    
#8楼 [楼主]2008-07-06 14:30 | Robot·H      
@横刀天笑

刀哥,是高人。
说的设计模式可以都用上!
  回复  引用  查看    
#9楼 2008-07-07 08:56 | Flymouse      
Bēniaǒ 的方法比较好,我觉得是前一部分使用策略模式发送消息,后一部分使用命令模式处理消息,MSMQ是一个很好的处理队列的办法。这里用观察着是不合适的,很明显你的消息用可能同时发生,而观察着对这样情况的处理会出现问题。
  回复  引用  查看    
#10楼 [楼主]2008-07-07 09:17 | Robot·H      
@Flymouse
前者发送的是我自己定义的。
我可以设计一个超类。
public class NotifyMessage
{
///MessageType:News,Sports,Mall
///SenderInfo :userid,username,email,msn,
///MessageBody
}

这样我就可以
IMessaging.IOrder
{
void Send(NotifyMessage info);
}
  回复  引用  查看    
#11楼 [楼主]2008-07-07 09:21 | Robot·H      
@Flymouse
前者肯定不适合用Observer 模式。
但后者完美感觉可以用Observer 模式和桥接模式 糅合使用。
现在还不知道效果如何?
  回复  引用  查看    
#12楼 [楼主]2008-07-07 16:03 | Robot·H      
正在更新中、、、
大家记得关注一下!
  回复  引用    
#13楼 2008-07-07 16:40 | afritxia2008 [未注册用户]
现在还不是讨论应该使用哪种设计模式的时候。目前大概的需求都不十分明确,而你所讨论的问题尚处于设计阶段!而设计模式其实是处在实施阶段。先不要考虑的那么细腻……代码如何编写,还是先放放
  回复  引用  查看    
#14楼 [楼主]2008-07-07 16:57 | Robot·H      
@afritxia2008
大哥说的既是!
可是时间紧迫啊。

  回复  引用  查看    
#15楼 2008-07-08 01:50 | Bēniaǒ      
@Robot·H
既然使用的是MSMQ,还有必要去使用观察者这样的实现吗。
MSMQ的作用可以说的降低某中频率较高的操作,而观察者的实现是立马触发。
  回复  引用  查看    
#16楼 [楼主]2008-07-08 07:38 | Robot·H      
@Bēniaǒ

现在一头雾水。
  回复  引用  查看    
#17楼 [楼主]2008-07-08 07:38 | Robot·H      
@Robot·H
昨天的设计泡汤了。
行不通!

  回复  引用  查看    
#18楼 [楼主]2008-07-10 18:29 | Robot·H      

任务快完成了,这是最终的框架图,谢谢以上朋友的建议!



标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-07-04 22:57 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接:

历史上的今天:
2007-07-04 介绍 JSON