在类中有效地使用静态字段和方法?在构造函数中初始化还是在声明中初始化?我需要指导
本文关键字:初始化 声明 字段 静态 方法 构造函数 有效地 | 更新日期: 2023-09-27 18:05:43
我知道在面向对象编程中存在许多关于何时使用或不使用静态字段和方法的问题,但大多数例子归结为使用数学。Pi或类似的简化例子
作为一名程序员,我有一个严重的失败,我猜这是由于我不符合OOP编程的一般要求。如果由我来决定,我会在我的许多程序中使用函数式方法,但我的程序员同事不一定同意。
我知道并不是所有的问题都能在面向对象环境中得到最好的解决,但是我将尝试提出我目前面临的一个问题,我认为它可以用面向对象技术来最好地解决。
我的主要问题是我不明白在c#中使用OOP时如何最好地利用系统资源。当向我的类引入静态字段和方法时,以及当将资源声明为静态或非静态时,我无法可视化内存分配和执行流程。
所以,这是对我手头问题的简短解释:
我需要开发一个在两个断开连接的系统之间同步信息的"实用程序"。"系统1"与"票证"一起运行,票证包含客户报告并由测试人员验证的有关bug的信息。我能够访问票券内容作为对象通过Linq查询SQL数据库通过。net的实体框架。
"系统2"操作需要基于"系统1"的票证创建的工作项。"实用程序"需要保持这些信息同步,并且可以从两个系统更改这些信息。因此,我需要在程序运行之间保持关于不同对象状态的信息的持久性。
因此,我使用"系统1"的数据库(只读)来创建与"系统2"创建初始工作项的要求相匹配的本地对象,并通过二进制序列化存储本地对象,以便我可以在下次运行时创建一个新的列表,并在本地比较值,避免不必要的网络和服务器负载,然后通过各自的API更新系统。
虽然我有一个工作的解决方案,这样做,我不确定它是否运行有效。我有一个类(LocalTicket)和一个类(LocalWorkItem),用于保存运行之间的状态,但是LocalTicket类使用数据库连接来收集关于ticket的信息,并且我声明了一个静态列表来保存来自服务器的值,以便与本地对象进行比较。在进入第一个LocalTicket对象的构造函数之前,我没有初始化列表,我通过LINQ to object查询这样做。
这会导致每次创建LocalTicket时都执行LINQ查询,还是只执行一次?我最好是通过类中的静态方法从LINQ查询初始化List,还是使用非静态方法用对象填充List,并要求调用我的实用程序类中的方法创建一个新对象以便能够比较对象?或者在定义时直接初始化它?从查询的内容创建的结果LocalTickets在本地使用,并且在每次运行时重新创建,以检测通过Help Desk应用程序对数据库所做的实际更改。
如果这看起来像一堆垃圾,我很抱歉,但我不知道如何用更明确的方式来描述它…
我想我需要一些关于设计类的指导,这些类包含对生成对象的外部源的调用,如工厂之类的。
在上下文中阅读这篇文章时,如果有人能给我任何建议,我感到很惊讶,但我还是抓住机会……
创建一个"service"类来管理每个单独的远程服务器,hold &通过那里的方法查询票证或工作项的列表。
您不希望票据或工作项的列表永远是永久的——您的应用程序将需要不时地刷新其中的一些。
:
- TicketService。
- WorklistService。
对于良好的编程形式,这些服务最好不是静态的,而是在主程序中作为全局变量拥有。
你的主工作循环可以包括:
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.
}