1

我知道在面向对象编程中何时使用或不使用静态字段和方法存在许多问题,但大多数示例归结为使用 Math.Pi 或类似的简化示例。

作为一名程序员,我已经严重不复存在了,我猜这是由于我的残疾造成的,我一般无法遵守 OOP 编程。如果由我决定,我会对我的许多程序使用函数式方法,但我的程序员同事不一定同意。

我知道并非所有问题都可以在 OOP 环境中得到最好的解决,但我将尝试提出一个我目前面临的问题,我认为最好使用 OOP 技术来解决。

我的主要问题是我不明白在 C# 中使用 OOP 时如何最好地利用系统资源。在向我的类引入静态字段和方法以及何时将资源声明为静态或非静态时,我无法可视化内存分配和执行流程。

因此,这是对我手头问题的简短解释:

我需要开发一个在两个断开连接的系统之间同步信息的“实用程序”。“系统 1”使用“票证”运行,其中包含客户报告并由测试人员验证的错误信息。我可以通过.Net 的实体框架通过 Linq 查询到 SQL 数据库,将 Ticket 内容作为对象访问。

“系统 2”使用需要根据“系统 1”的工单创建的工作项进行操作。“实用程序”需要保持此信息同步,并且可以从两个系统进行更改。所以我需要在程序运行之间保持有关不同对象状态的信息。

所以我使用“系统 1”的数据库(只读)来创建与“系统 2”创建初始工作项的要求相匹配的本地对象,并通过二进制序列化存储本地对象,这样我就可以在接下来在本地运行并比较值,避免不必要的网络和服务器负载,然后通过各自的 API 更新系统。

虽然我有一个可行的解决方案,但我不确定它是否运行有效。我有一个类 (LocalTicket) 和一个类 (LocalWorkItem),用于在运行之间保持状态,但是 LocalTicket 类使用数据库连接来收集有关工单的信息,并且我声明了一个静态列表来保存来自服务器的值与本地对象进行比较。在输入第一个 LocalTicket 对象的构造函数之前,我不会初始化列表,而是通过 LINQ to Object 查询来完成的。

这会导致我的 LINQ 查询在每次创建 LocalTicket 时执行,还是只执行一次?我最好是通过类中的静态方法从 LINQ 查询初始化列表,还是让非静态方法用对象填充列表并要求我的实用程序类中的调用方法创建一个新对象以能够比较对象?还是在定义时直接初始化?从查询内容创建的结果 LocalTickets 在本地使用,并在每次运行时重新创建,以检测通过帮助台应用程序对数据库所做的实际更改。

如果这看起来像一堆垃圾,我很抱歉,但我不知道如何用更明确的方式来描述它......

我想我需要一些关于设计类的指导,这些类包含对生成对象的外部源的调用,比如工厂的东西或其他东西。

在上下文中阅读此内容时,我很惊讶是否有人真的可以给我任何建议,但我抓住机会......

4

1 回答 1

0

创建一个“服务”类来管理每个单独的远程服务器,通过那里的方法保存和查询工单或工作项的列表。

您不希望工单或工作项的列表一直保持不变——您的应用程序需要不时刷新其中的一些。

所以:

  • 票务服务。
  • 工作清单服务。

对于良好的编程形式,这些服务最好不要作为静态变量,而是作为主程序中的全局变量拥有。

然后,您的主要工作循环可以包括:

this.ticketService = new TicketService( /*some DB location*/);
this.worklistService = new WorklistService( /*worklist DB or URL location*/);
while (stillRunning) {
    List<Ticket> tickets = ticketService.queryTickets();
    syncTickets( tickets);
    // wait 1 minute.
}

希望这可以帮助。

于 2013-05-04T10:27:24.703 回答