关于设计模式的选取

一本正经道 2017-12-07 05:59:54

公司.net项目需要扩展功能,目前大致结构是:Client <--> WCF Service <--> Database

现在有业务需要和外部平台进行通信,调用平台的API。规划新建一个和Client的Web项目负责与外部平台的互相调用。
系统结构将变成:
Client <--> WCF Service <--> Database
|
Web Application

那么问题来了,假设在WCF接受Client的下单操作后,WCF要怎样通知Web项目去访问外部平台来同步订单信息?Web端再创建私有的API供WCF自己访问吗?还是有更好的方法?
WCF发出通知这一步又要如何触发? 使用观察者模式是否可行?
...全文
767 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
一本正经道 2017-12-19
  • 打赏
  • 举报
回复
决定在web application中开几个仅供本地调用的服务,wcf直接调用来触发web访问远程api。 谢谢各位~
绿领巾童鞋 2017-12-11
  • 打赏
  • 举报
回复
asp.net 后台调wcf 跟 winform 没有本质上的差异。 要么是网页做定时查询状态,要么真的用websocket。
圣殿骑士18 2017-12-09
  • 打赏
  • 举报
回复
引用 8 楼 lbhqq159 的回复:
[quote=引用 7 楼 daixf_csdn 的回复:] [quote=引用 6 楼 lbhqq159 的回复:] [quote=引用 5 楼 xuzuning 的回复:] 只要你选择了 HTTP 协议作为通讯的基础,就不可能实现双向通讯 如果使用 websocket 协议,那也只是受限的双向通讯,因为需要客户端率先发起通讯请求,否则服务端是呼叫不到客户端的
谢谢回复, 所以我希望由WCF 服务端发起HTTP Request访问Web Application的api来触发web去访问外部平台,不知道这样设计会有什么隐患吗?[/quote] 客户端率先发起并不麻烦,相当于客户端启动时向服务器注册一次,之后服务器就可以直接给客户端发送消息了。 不过你说的这种方式,方便性上和效率上,更好。[/quote] 谢谢,正如本贴标题,设想是当WCF的下单操作AddOrder()完成后,由观察者Observer(同样在WCF中)的SendRequest()去通知Web Application继而与平台同步订单信息。使用观察者的好处是对原WCF逻辑改动很小。 本人技术有限,不知道有没其他更好的方法实现AddOrder()到SendRequest()的触发逻辑,同时能兼顾解耦和开闭原则?[/quote] 至少从你的描述上看,并没有看到要使用观察者模式的必要因素。你说的理由是“使用观察者的好处是对原WCF逻辑改动很小”,但我认为这不是理由, 你还应该挖掘更深层次的考量,比如为什么一定要使WCF逻辑改动很小?如果为了设计而设计,一般来说,这种必要性都是否定的。 我认为设计的原则是,设计应该由需求推动,而不是由设计自身推动,比如你的系统架构如果需要兼容不同的观察者类型,或者WCF服务有多个版本,从而必须要做 WCF服务和通知人(观察者)的适配,那么这种设计才是有必要的。
  • 打赏
  • 举报
回复
你说的“web Application 中创建对内的API供WCF调用”,以及“web Application 中创建对内的API供WCF调用”等等,最终目的还是要“Client与Web项目与外部平台的互相调用”,你看别人都在用工程师的方式来讨论可行性,而你在套用设计模式概念。这就好像几个人讨论如何在土地里种出5斤一个的大红薯,而你用国际形势的变化来指导中红薯的技术,这肯定不能落地。 其实从#1 楼开始,反复地,工程师就在问你是否会双向通讯技术,还是你只会简单的http单向数据访问。就这么简单的一个问题啊!
  • 打赏
  • 举报
回复
不是什么“设计模式的选取”问题,其实技术是否落地、是否学过那些基本的双向通讯技术的问题。
  • 打赏
  • 举报
回复
你说的“观察者”名词儿比较空洞,需要你首先用直截了当的.net 技术术语来说明一下你是如何从你的 WCF 端通知 client 的,抛开什么“观察者”这种雷人的词儿而直接说 .net 里边的名词儿这样才能把技术打通。仅仅会说设计模式名词儿,这样的设计模式比较害人。
大鱼> 2017-12-09
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
看起来还是 websocket
+1
大鱼> 2017-12-09
  • 打赏
  • 举报
回复
感觉和你所说的设计模式关系不大
秋的红果实 2017-12-09
  • 打赏
  • 举报
回复
首先,你的问题和观察者模式无关。 也不要迷恋什么模式,解决问题才是关键。模式是前人处理问题的总结,本身也有缺陷,供参考的 既然可以改WCF service,能不能,将要增加的web应用的功能,放到WCF service里面去,这样,在内部互相通讯就方便多了,然后再增加一个web应用client 否则,一个独立web应用和WCF service之间属于进程间通讯了
xuzuning 2017-12-09
  • 打赏
  • 举报
回复
主动推个结果给.... 这就是双向通讯的特征 如果要简单,至少你得放弃这个想法
一本正经道 2017-12-09
  • 打赏
  • 举报
回复
引用 11 楼 sp1234 的回复:
你说的“web Application 中创建对内的API供WCF调用”,以及“web Application 中创建对内的API供WCF调用”等等,最终目的还是要“Client与Web项目与外部平台的互相调用”,你看别人都在用工程师的方式来讨论可行性,而你在套用设计模式概念。这就好像几个人讨论如何在土地里种出5斤一个的大红薯,而你用国际形势的变化来指导中红薯的技术,这肯定不能落地。 其实从#1 楼开始,反复地,工程师就在问你是否会双向通讯技术,还是你只会简单的http单向数据访问。就这么简单的一个问题啊!
老师教训的是,以后会注意,还请多指教我这个菜鸟哈~ 只是我预想中没必要使用双向通讯吧,wcf端特定业务完成后主动推个结果给web 就行了。 楼上朋友说的也很有道理,还是用最简单的方式完成任务吧。
圣殿骑士18 2017-12-08
  • 打赏
  • 举报
回复
引用 6 楼 lbhqq159 的回复:
[quote=引用 5 楼 xuzuning 的回复:] 只要你选择了 HTTP 协议作为通讯的基础,就不可能实现双向通讯 如果使用 websocket 协议,那也只是受限的双向通讯,因为需要客户端率先发起通讯请求,否则服务端是呼叫不到客户端的
谢谢回复, 所以我希望由WCF 服务端发起HTTP Request访问Web Application的api来触发web去访问外部平台,不知道这样设计会有什么隐患吗?[/quote] 客户端率先发起并不麻烦,相当于客户端启动时向服务器注册一次,之后服务器就可以直接给客户端发送消息了。 不过你说的这种方式,方便性上和效率上,更好。
一本正经道 2017-12-08
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
只要你选择了 HTTP 协议作为通讯的基础,就不可能实现双向通讯 如果使用 websocket 协议,那也只是受限的双向通讯,因为需要客户端率先发起通讯请求,否则服务端是呼叫不到客户端的
谢谢回复, 所以我希望由WCF 服务端发起HTTP Request访问Web Application的api来触发web去访问外部平台,不知道这样设计会有什么隐患吗?
xuzuning 2017-12-08
  • 打赏
  • 举报
回复
只要你选择了 HTTP 协议作为通讯的基础,就不可能实现双向通讯 如果使用 websocket 协议,那也只是受限的双向通讯,因为需要客户端率先发起通讯请求,否则服务端是呼叫不到客户端的
一本正经道 2017-12-08
  • 打赏
  • 举报
回复
引用 3 楼 wanghui0380 的回复:
所以你这里需要在加一个统一地址的消息推送中心 页面上统一订阅这个消息推送中心的消息,wcf做完了给消息推送中心发消息,然后消息推送中心给页面发消息,让他页面刷页面 当然现在的大型架构设计上,也还有缓存机制。页面刷也只是刷缓存数据,而不是刷数据库的数据
谢谢,建立消息推送中心是个思路。 我的想法是web Application 中创建对内的API供WCF调用,这样也就解决了web无状态下的双向通信了吧? 还请指教~
一本正经道 2017-12-08
  • 打赏
  • 举报
回复
引用 7 楼 daixf_csdn 的回复:
[quote=引用 6 楼 lbhqq159 的回复:] [quote=引用 5 楼 xuzuning 的回复:] 只要你选择了 HTTP 协议作为通讯的基础,就不可能实现双向通讯 如果使用 websocket 协议,那也只是受限的双向通讯,因为需要客户端率先发起通讯请求,否则服务端是呼叫不到客户端的
谢谢回复, 所以我希望由WCF 服务端发起HTTP Request访问Web Application的api来触发web去访问外部平台,不知道这样设计会有什么隐患吗?[/quote] 客户端率先发起并不麻烦,相当于客户端启动时向服务器注册一次,之后服务器就可以直接给客户端发送消息了。 不过你说的这种方式,方便性上和效率上,更好。[/quote] 谢谢,正如本贴标题,设想是当WCF的下单操作AddOrder()完成后,由观察者Observer(同样在WCF中)的SendRequest()去通知Web Application继而与平台同步订单信息。使用观察者的好处是对原WCF逻辑改动很小。 本人技术有限,不知道有没其他更好的方法实现AddOrder()到SendRequest()的触发逻辑,同时能兼顾解耦和开闭原则?
wanghui0380 2017-12-07
  • 打赏
  • 举报
回复
所以你这里需要在加一个统一地址的消息推送中心 页面上统一订阅这个消息推送中心的消息,wcf做完了给消息推送中心发消息,然后消息推送中心给页面发消息,让他页面刷页面 当然现在的大型架构设计上,也还有缓存机制。页面刷也只是刷缓存数据,而不是刷数据库的数据
wanghui0380 2017-12-07
  • 打赏
  • 举报
回复
这已经不是设计模式了,这是架构选型 按你的想法,其实不可行。web是无状态的,你通知你的web服务端刷数据?你服务端刷数据,发给谁,给谁展示?? 因为如果你的Web Application是运行在webserver上他将没有办法执行长期监控任务。 楼上websocket其实是通知客户端去刷新页面,而不是通知你的Web Application去刷新数据。
正怒月神 2017-12-07
  • 打赏
  • 举报
回复
看起来还是 websocket

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧