C# 您是如何构建面向网络的应用程序的?

C# 您是如何构建面向网络的应用程序的?,c#,architecture,oop,C#,Architecture,Oop,我正在开始设计一个主要面向网络的新应用程序,我正在寻求那些提出了良好的体系结构设计或OOP类模型的人的建议 请描述基本架构和/或类结构。你提取出了通讯信息吗?你想出了什么样的类实体 该应用程序将同时具有侦听器类和客户端类。它类似于提要聚合器,但使用持久连接而不是HTTP。换句话说,我连接到一个套接字,并有一个数据双向流动的持久连接。然后,我也有一些客户端持续连接到我,我将部分或全部数据发送给他们 此外,我不能使用WCF或.NET3.0或3.5中的任何东西,尽管我可以使用C3,因为我是在VS200

我正在开始设计一个主要面向网络的新应用程序,我正在寻求那些提出了良好的体系结构设计或OOP类模型的人的建议

请描述基本架构和/或类结构。你提取出了通讯信息吗?你想出了什么样的类实体

该应用程序将同时具有侦听器类和客户端类。它类似于提要聚合器,但使用持久连接而不是HTTP。换句话说,我连接到一个套接字,并有一个数据双向流动的持久连接。然后,我也有一些客户端持续连接到我,我将部分或全部数据发送给他们


此外,我不能使用WCF或.NET3.0或3.5中的任何东西,尽管我可以使用C3,因为我是在VS2008上开发的。我必须与Windows 2000兼容。

我在几周前开始编写的客户端-服务器应用程序的末尾。我在.Net cient&server中使用了WCF

但是服务器还必须连接到网络上的设备,该设备只能通过TCP/IP理解ASCII

你提取出了通讯信息吗

对。我想是吧。我的意思是,我不确定我是否100%理解你的问题。对于与第三方设备的TCP连接,我将TCP连接和通信的详细信息隐藏在我编写的类后面。该设备将ASCII指令转换为红外信号,以控制卫星天线和DVD播放机等设备。我将TCP通信抽象为一个类,因此我的服务器所要做的就是进行如下调用:

_irService.SendCommand(someAsciiCommand);
你想出了什么样的类实体

它们基于我的域。你的域名应该基于你的域名。除此之外,我不确定我是否理解这个问题。您的域将指定您的对象

在我的领域中,我正在处理一个服务器应用程序,该应用程序负责使用VLC通过UDP调度和播放多播广播。这些多播广播必须在各个方面都可配置

当我分析这个域时,我提出了一个由广播、频道、设备和广播进程组成的模型——一个负责启动vlc.exe进程并维护其生命周期的类


该领域对网络技术几乎没有影响。最后,我在WCF中使用了一些双工服务,使我能够操作域。但网络选择并不是由域名决定的。我想要一个带有二进制序列化对象的TCP连接,我想要一个与服务器的双向通信,这样我的客户端就可以通过回调获得实时更新。无论我的域名是什么样子,我都可以使用这些选项

网络应用是一个不明确的类别,涵盖了相当广泛的可能需求和设计。根据定义,您必须处理并发和延迟。健壮性始终是一个挑战:设计一个可用性是其所有硬件和软件组件中最低公分母的系统太容易了。您必须升级应用程序的O/S和组件:您能接受关闭所有解决方案,还是需要一些热/冷备份甚至故障切换功能?网络以异乎寻常的方式失败,至少对我们可怜的纯软件人来说:你依赖的东西太多了,你从来没有考虑过路由器、交换机、DNS服务器、那有胡子的网络工程师在走廊里的脾气!并以悲观的心态设计互动

一个警告:在设计分布式应用程序时不要太面向对象。对象在管理软件复杂性方面有自己的位置,但当你开始将它们推上网络的时候,大量的性能和版本依赖性问题就会让它们难堪。面向服务的体系结构是一个流行词,但在某种程度上作为设计原则是有用的。大型机的人早就知道这一点了

两个一般性书籍建议:

是几岁,但带来了你可能面临的挑战,特别是如果你真的有硬或软实时依赖某处。有点理论化,但有助于灌输对复杂性的某种尊重! 系统地介绍了可用于集成新组件和旧组件的不同设计选项。