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

时间:2009-03-07 23:36:12

标签: c# architecture oop

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

请描述基本架构和/或类结构。你抽出了通信位吗?你想出了哪些类实体?

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

另外,我不能使用WCF或.NET 3.0或3.5中的任何东西(虽然我可以使用C#3,因为我正在开发VS2008)。我必须与Windows 2000兼容。

2 个答案:

答案 0 :(得分:0)

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

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

你抽出了通信位吗?

是。我猜。我的意思是,我不确定我100%理解你的问题。对于我与第三方设备的TCP连接,我隐藏了我写的类后面的TCP连接和通信的详细信息。有问题的设备将ASCII命令转换为IR信号,以控制卫星天线和DVD播放器等内容。我将TCP通信抽象为一个类,所以我的服务器所要做的就是调用:

_irService.SendCommand(someAsciiCommand);

您提出了哪些类实体?

他们是基于我的域名。你的应该基于你的域名。我不确定我是否理解那个问题。您的域将决定您的对象。

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

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

域名对网络技术影响不大。我最终在WCF中使用了一些双工“服务”,允许我操作域。但网络选择不是由域名决定的。我想要一个带有对象二进制序列化的TCP连接,我希望与服务器进行双向通信,这样我的客户就可以通过回调获得实时更新。无论我的域名是什么样的,我都可以使用这些选项。

答案 1 :(得分:0)

“网络应用程序”是一个不明确的类别,涵盖了各种可能的要求和设计。根据定义,您将不得不处理并发和延迟。稳健性始终是一项挑战:设计一个系统的可用性是其所有硬件和软件组件的最低标准,这太容易了。您将不得不升级应用程序的操作系统和组件:您是否能够解决所有解决方案,或者您需要一些热/冷待机甚至故障转移功能?网络以异乎寻常的方式失败(至少对我们糟糕的纯软件人员来说):你依赖于许多你从未考虑过的东西(路由器,交换机,DNS服务器,那个留着胡须的网络工程师在走廊里的脾气!),并且应该设计与悲观的心境相互作用。

一个警告:在设计分布式应用程序时不要过于面向对象。对象在管理软件复杂性方面占有一席之地,但是当你开始在线上推送它们时,大量的性能和版本依赖性问题会引起他们丑陋的头脑。面向服务的体系结构是一个流行语,但在某种程度上作为设计原则是有用的。大型机家伙已经知道这个... ...

两本一般书籍建议: