问题标签 [class-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
215 浏览

c# - 如何在班级内共享 IDisposable 资源?

我正在编写一些控制台应用程序来在 SQLite 数据库之间移动一些数据。连接的类和各种准备好的语句实现了 IDisposable,所以我使用using块来实例化这些对象,如下所示:

但是,我需要能够在一种方法中创建这些连接,然后在其他方法中调用它们。对我来说,将这些连接存储为实例变量的最简洁、最容易混淆的方式是什么?我想确保.Dispose()以一种智能的方式调用他们的方法,但看不到确保所有操作都发生在单个using块的上下文中的好方法。

我意识到这是一个 C# 新手问题,所以请调整你的答案。如果您有建议的解决方案,如果您包含一个代码示例来说明,我会很高兴。

编辑:我的用例是一个控制台应用程序。有人传入源连接字符串和目标连接字符串,控制台应用程序执行操作。我真的会让我的控制台类程序本身像这样实现 IDisposable 吗?:

0 投票
4 回答
340 浏览

c++ - 如何减少具有相同名称但不同类型的数据成员的类的代码重复?

我在设计这样的课程时遇到了麻烦

C1 和 C2 具有相同的方法 foo(),

两个 Derived 类的 Update() 完全相同,但成员的类型不同。所以我必须为每个新的派生类复制更新实现。

这是减少这种代码重复的一种方法吗?我只提出了一个带有宏的解决方案。我认为有一种更优雅的方法可以用模板解决这个问题,但我想不通..

编辑: 非常感谢大家,但我想我错过了一些东西..

1.我用的是c++

2.实际上每个 Derived 类有大约 5 个成员,它们都提供 foo() 方法并且派生自同一个基类。我的情况是我已经编写了一个(很长的)Update() 方法,它可以在每个派生类中工作而无需任何修改。所以我只是将这个 Update() 复制并粘贴到每个新类的 Update() 中,这会导致可怕的代码重复。我想知道是否有一种方法不需要我过多地重写 Update() 并且可以减少重复。

再次感谢

0 投票
7 回答
2625 浏览

c# - C# 或 Java 中 MruList 的高效建模

您将如何在 C# 或 Java 中实现容量有限的通用 MruList?

我想要一个代表最近使用的缓存或列表(= MruList)的类。它应该是通用的,并且限制在实例化时指定的容量(计数)。我希望界面类似于:

每个 Store() 都应该将项目放在列表的顶部(前面?)。GetList() 应返回按最近商店排序的有序列表中的所有项目。如果我调用 Store() 20 次并且我的列表有 10 个项目长,我只想保留最近存储的 10 个项目。GetList 和 StoreRange 旨在支持在应用程序启动和关闭时检索/保存 MruList。

这是为了支持 GUI 应用程序。我想我可能还想知道存储项目的时间戳。也许。没有把握。

在内部,您将如何实施它,为什么?

(不,这不是课程作业)

0 投票
8 回答
521 浏览

c# - 我真的不应该在属性访问器中做“长时间运行”的事情吗?

如果是这样,为什么?什么是“长期运行”?

在属性访问器中施展魔法似乎是我作为类设计师的特权。我一直认为这就是 C# 的设计者将这些东西放在那里的原因——所以我可以做我想做的事。

当然,最好的做法是尽量减少对课程用户的意外,因此在方法中嵌入真正长时间运行的东西(例如,10 分钟的蒙特卡罗分析)是有意义的。

但是假设一个 prop 访问器需要一个 db 读取。我已经打开了数据库连接。db 访问代码在属性访问器中是否在正常预期范围内是“可接受的”?

0 投票
2 回答
137 浏览

c# - 组织执行测试的方法 - C#

我现在有一个类,在这个类中它有 15 个左右的私有方法,这些方法在计时器运行的循环中执行某些任务。其中一些方法调用数据库,而另一些则不调用。

问题是......我该如何安排这些以便我可以设置课程以便我可以伪造一个回购或执行过程?

这是我现在拥有的简化版本。

0 投票
4 回答
1321 浏览

vb.net - Vb.net 我怎样才能从课堂的其余部分隐藏这个变量?

对于几种类型的对象,我宁愿只在需要时才初始化它们(sql 连接、大型机连接、大型表单),因为有些用户只使用程序的非常特定的部分(经理可能会使用一台大型机来做他们想做的事情,定期用户主要使用其他资源)。

为什么是 p_?我在想使用 p_ 将帮助我在智能感知中不使用或轻松找到该类中本地的变量而不是属性。然后在私有属性或不需要属性本地访问的私有变量前面单独使用 _ 。

什么是帮助防止我意外直接访问 p_dlgAdd 的好方法?这对 2008 年的匿名变量有用吗?(我还没有 2008 年可用,但他们认为我们很快就会有)

0 投票
7 回答
791 浏览

c# - 类名很常见怎么办?

我刚刚在我的 .net 项目中添加了另一个 3rd-party 组件,其中包含一个名为的类Client,它让我想到了常见的类名。

您是否将您的公共课程命名为像 一样常见Client的名称,或者您是否尝试使名称更具体?

过去我会说这很好,Client因为它总是可以通过它的命名Company.Product.Client空间(WebClientTcpClientSmtpClient

我认为 like 的名字MessagePub.Client看起来很整洁,MessagePub.MessagePubClient但更不用说,但是有很多Clients 浮动也感觉很混乱。

我使用的所有这些第 3 方组件实际上都是开源的,因此是否建议重构并将它们的类名更改为更具描述性的名称,以使我的代码更具可读性,或者通过它们的命名空间访问是一个更好的主意?或者它只是无关紧要?:-)

0 投票
4 回答
173 浏览

c++ - 根据项目的调试/发布状态两次定义简单的内联方法是否有好处?

我一直想知道,两次定义琐碎的方法是好还是坏的做法,这取决于
项目是否处于调试/发布状态。这是为了内联它们。例如,Foo.h:

现在,在 Foo.cpp 中:

这完全没用吗?例如,由于编译器(MSVC)本身内联/优化方法的能力?

尽管如此,这是我多年来一直在使用的东西。请纠正我,如果我在这里完全错了......

0 投票
9 回答
29077 浏览

ruby - Ruby - 在模块/类之间共享记录器实例

编写一个小 Ruby 脚本,该脚本可以访问网络并爬取各种服务。我有一个模块,里面有几个类:

我想在所有这些类中共享一个记录器。通常我只是把它放在模块中的一个常量中并像这样引用它:

问题是我无法创建我的记录器实例,直到我知道输出的去向。您通过命令行启动爬虫,此时您可以告诉它您要在开发(日志输出到 STDOUT)或生产(日志输出到文件 crawler.log)中运行:

我有一个类Options可以解析通过命令行传入的选项。只有到那时我才知道如何使用正确的输出位置实例化记录器。

所以,我的问题是:我如何/在哪里放置我的记录器对象,以便我的所有类都可以访问它?

我可以将我的记录器实例传递给new()我创建的每个类实例的每个调用,但我知道必须有一种更好的 Rubyish 方式来做到这一点。我想象模块上有一些奇怪的类变量与class << self其他魔法共享。:)

更多细节:Runner通过将命令行选项传递给Options类来启动一切,并返回一个带有几个实例变量的对象:

我需要代码Engine才能访问记录器对象(以及在内部初始化的更多类Engine)。帮助!

如果您可以动态更改已经实例化的 Logger 的输出位置(类似于更改日志级别的方式),那么所有这些都可以避免。如果我在生产中,我会将其实例化为 STDOUT,然后转换为文件。我确实在某处看到了有关更改 Ruby 的 $stdout 全局变量的建议,该变量会将输出重定向到 STDOUT 以外的其他位置,但这似乎很 hacky。

谢谢!

0 投票
3 回答
374 浏览

c# - .Net 中最简单的唯一标识符是什么?

所以我有这个

如何获得一个完全唯一的号码?

谢谢!