如何能做到界面与网络逻辑的分离?
我想把网络部分封装到dll中,与界面部分尽最大的可能分开来。
只要实现界面部分显示接收到的网络数据,而发送数据又要从界面传递到网络部分
不知道这方面的逻辑有没有比较好的设计架构呢?
希望大家多多指点,多谢了
[解决办法]
坐等高手解答
[解决办法]
MVC
[解决办法]
MVC
[解决办法]
这个需要好好设计一下~
[解决办法]
推荐一下,希望更多人关注这个~
[解决办法]
看看设计模式,比如Observer
[解决办法]
界面 和 网络 通过可靠的信息队列 来传递数据
[解决办法]
有一定难度,目前还提不出方案,关注
[解决办法]
界面+应用协议+网络逻辑
[解决办法]
[解决办法]
sdsasaafasfsadfasdf
[解决办法]
safasfsadfsdfasfa
[解决办法]
观察者模式+中介者模式
[解决办法]
热管他个哥特人个
[解决办法]
中介者模式 写类后调用就ok
[解决办法]
这个听起来确实很矛盾,关注。
[解决办法]
有点基础的人就会了
[解决办法]
就是啊。直接把所有网络相关的封装起来,导出3个函数:连接函数,发送函数,接收函数,就OK了
[解决办法]
逻辑实现与界面实现封装的要好
[解决办法]
COM做逻辑层
[解决办法]
进来学习一下
[解决办法]
菜鸟路过,熟悉一下观察者模式
[解决办法]
界面封装成一个dll,网络也封装成一个dll,这样的架构
[解决办法]
这个听起来确实很矛盾,关注。
[解决办法]
主要看数据量,与连接数。。。
[解决办法]
connect 传入界面handle
sendpacket传入char*,packlen
recv后postmessage给handle界面。
[解决办法]
[解决办法]
基本逻辑就是如此。
[解决办法]
MVC(模型、视图、控制器)分层么
[解决办法]
[解决办法]
用观察者模式可以解决这个问题。网络部分的组件对应Model,而界面部分对应View
1. “发送数据又要从界面传递到网络部分”,这要求Model向View开放一个接口:Send(),用于发送数据。使用的时候可以把Model设置为View的一个成员(暂不考虑多层结构),发送数据的时候直接调用此接口即可,这是一个同步调用的过程;
2. “界面部分显示接收到的网络数据”,这要求View向Model开放一个回调接口:Update(),用于实时更新Model接收到得数据。具体的做法,两种思路:一个是用接口(函数指针),一个是用消息。
2.1 接口的方式,首先要抽象一个View的接口:UI::Update(char *),由于Model作为View的成员,那么可以在初始化Model的过程中通过参数把这个接口传递到Model中保存起来,用于Model的回调;等到Model收到数据,直接Call这个接口即可;
2.2 消息的方式,Windows下由于可以通过SendMessage/PostMessage来实现和UI的通信,因此可以在Model中定义一个窗体句柄:HWND,在View初始化Model的时候把View自身的句柄传递给Model,作为回调接口(这里所有的窗体对象一律都看做View),当Model收到数据的时候,发送一个消息即可:SendMessage(hWnd, WM_RECV_DATA, NULL, (LPARAM)pszData)。
第一个方式通用性比较强,不管是什么语言采用这个模式,都可以用这个方法;第二个方式算是Windows下实现异步通信的特殊方式,这个方式使得Model和View的耦合仅仅局限在一个窗体句柄,通过SendMessage间接完成了回调。
当然,还有一个方式可以实现异步回调,就是类似于C#下的委托。推荐boost库下的function/bind机制,由于内容太多详细就不展开了,楼主有兴趣可以自己研究下。
PS : 楼上的有提到MVC模式的。如果楼主熟悉MVC模式,就用MVC模式解决这个问题。观察者模式便是MVC模式里面所包含的一个部分。
[解决办法]
支持,顶一下,B/S的话 MVC是不错的选择
其实只要你抽象好了你的接口,你就不愁这些代码分不开了
比如用 .Net 命名空间 来存放跟网络有关的的业务处理 大体的有Send(),Receive(),Status()
用.UI 命名空间来存放界面显示的业务
访问网络的时候调用.Net 下面的 那三个方法 就可以搞定的
[解决办法]
用消息做为界面和网络层的中转
论坛签名======================================================================
vclover2009:你好!
截至 2011-04-12 19:35:45 前:
你已发帖 14 个,未结贴 0 个;
结贴率为: 100.00%
[解决办法]
可以参照微软.net的petshop三层框架吧
[解决办法]
使用网络管理协议SNMP和MIB,
[解决办法]
有详细代码么?
[解决办法]
观察着模式!
[解决办法]
忽然想到BCB的socket组件:BCB中 所有组件都是窗体类的成员 所以界面更新与网络通信几乎不需要额外考虑 、
[解决办法]
http://blog.csdn.net/RobertBaker/archive/2008/07/29/2727646.aspx
[解决办法]
我经常需要做这种软件。
我一般是这样来实现的:
网络/串口部分处理采用后台工作线程来实现。
UI与工作线程之间做个池子,然后由工作线程模块抽象出一个发送接口函数出来。
数据的更新部分,也采用池来保存,然后由UI部分采用定时器,主动查询后台工作线程部分是否有数据到达。
这中间因为需要频繁动态分配和释放内存,所以,中间需要用到内存池技术,能够到达比较好的内存管理效果。