问一个项目开发架构问题
需求是这样的:
1、WinForm程序
2、多人开发,每人实现不同模块功能
3、整个项目和后台建立一个TCP连接,每个模块都要与后台TCP通讯
现已做好和后台的TCP连接类,预想的架构是每个人开发一个UserControl,主程序加载UserControl时将TCP连接对象作为参数传入。这样的话主程序和每个模块程序都要有TCP连接类的定义(不同项目中TCP连接类的命名空间都相同),当要将TCP连接类对象作为参数传入时编译通不过,说不能转换改类型。
尝试用Marshal.StructureToPtr后再传也不行,不知改怎么弄了,请高人指教。也许我这个架构本身有问题,该怎么改比较好呢?
tcp
winform
通讯
架构
------解决方案--------------------你的TCP连接对象说得太笼统,如果是一个封装有tcpclient之类的自定义类,各模块直接引用通信模块就可以了,这种应用很常见。但说得简单,实现通信模块并不容易,比如要考虑多线程问题,可能需要建立通信队列等等。
------解决方案--------------------
不会每个模块都定义了一个类吧,只需要在一个dll的工程中定义一次即可。其它工程引用这个工程。
------解决方案--------------------引用同一个dll就可以了,没必要传什么参数
------解决方案--------------------个人见解
我觉得应该定义一个共用类,让这个类和TCP进行通讯,然后各个模块引用这个类,那么所有的通讯内容的转化都应该在这个类中进行处理
------解决方案--------------------如下建议:
1.TCP连接对象 —— 这类可能操作硬件通讯的 类,个人觉得 不要进行封装传递 比较好;
你可以 将 IP地址,端口 等信息 封装传递,在统一的地方 重建 “TCP连接对象”;
2.Marshal 看到这个单词,我敏感的觉得:序列化 可能得注意点啥子;
3.“而且我的想法是每个人的UserControl编译成dll供主程序调用,而不是代码和主程序代码一块编译,这样方便日后的升级”——是否 UserControl 有统一的接口? 插件式程序扩展升级 都以接口的标准。
4.Re "g767160":这个答案 很标准——这类似 一种命令模式,将需要执行的 过程和返回值 封装成一个对象,统一调用 某些对象 处理;
——————————————————————————————————————
以上回答,并没有完全针对楼主的 BUG;
只是觉得 假如是自己的话,自己可能得注意哪些要点。
------解决方案--------------------为端对开发人员定义一个UC基类,成员定义UC时均继承于基类,主窗体只管基类就行,不过问其他细节