【问题标题】:How have you structured your network oriented apps?您是如何构建面向网络的应用程序的?
【发布时间】:2010-10-11 23:39:16
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# architecture oop


    【解决方案1】:

    我正处于几周前开始编写的客户端-服务器应用程序的最后阶段。我将 WCF 用于 .Net cient & 服务器。

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

    你抽象出通信位了吗?

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

    _irService.SendCommand(someAsciiCommand);
    

    你想出了什么类实体?

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

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

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

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

    【讨论】:

      【解决方案2】:

      “网络应用程序”是一个不明确的类别,涵盖了相当广泛的可能要求和设计。根据定义,您将不得不处理并发和延迟。稳健性始终是一个挑战:设计一个可用性是其所有硬件和软件组件的最低公分母的系统太容易了。您将不得不升级应用程序的 O/S 和组件:您能否忍受关闭所有解决方案,或者您是否需要一些热/冷备用甚至故障转移功能?网络以奇特的方式失败(至少对我们这些可怜的纯软件人来说):你依赖于许多你从未考虑过的东西(路由器、交换机、DNS 服务器、走廊里那个留着胡子的网络工程师的脾气!),并且应该设计与悲观的心态相互作用。

      一个警告:在设计分布式应用程序时不要过于面向对象。对象在管理软件复杂性方面占有一席之地,但是当您开始将它们推送到网络上时,大量的性能和版本依赖性问题就会引起他们的丑陋。面向服务的架构是一个流行词,但在某种程度上作为设计原则很有用。大型机的人早就知道这一点了……

      两本书推荐:

      【讨论】:

        猜你喜欢
        • 2011-05-02
        • 2013-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 2012-08-28
        • 1970-01-01
        相关资源
        最近更新 更多