问题标签 [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 投票
2 回答
167 浏览

php - 从另一个文件解析文件名

我目前可以做到以下几点:

我想对文件名(__FILE__但动态评估)做类似的事情;我想从超类中知道子类所在的文件。有没有可能以任何优雅的方式?

我知道你可以用 做一些事情get_included_files(),但这不是很有效,特别是如果我有很多实例。

0 投票
6 回答
21778 浏览

c++ - static const Member Value vs. Member enum:哪种方法更好?为什么?

如果您想将某个常量值与一个类相关联,这里有两种方法可以实现相同的目标:

从客户的角度来看,它们在句法和语义上似乎是相同的:

除了纯粹的风格问题之外,还有什么理由会比另一种更受欢迎吗?

0 投票
5 回答
940 浏览

java - 大型内部类和私有变量

我遇到过几次的一件事是服务类(如 JBoss 服务)由于辅助内部类而变得过大。我还没有找到打破课堂的好方法。这些助手通常是线程。这是一个例子:

所以,如果我有几个助手并且它们很复杂,会发生什么,整个类文件会变得非常大。我喜欢内部类,因为它清楚地表明这些类完全归服务所有,并且只为帮助该服务而存在。我试过打破类并将父服务作为参考传递,这主要是有效的,但我不喜欢的事情是:

  • 我最终公开了包级别的访问器,以便分解的类可以访问变量,而在此之前我根本没有公开设置器,因为内部类可以直接访问。
  • 另外,由于我不断调用访问器而不是底层变量,因此事情变得更加冗长。一个小问题,授予。
  • 方便的方法(例如 checkAssetIsValid() 或类似的方法)现在需要包级别的公开,以便帮助类可以调用它们,而以前作为内部类它们可以是私有的。
  • 更糟糕的是,我需要将服务实现类传递给辅助类构造函数,因为我不想在服务实现的接口中公开这些辅助方法,因为这会迫使它们公开。这可能会产生一些单元测试/模拟问题。
  • Worse yet, any synchronization I wanted to do gets leaked out through some external convenience method (e.g. lockDownAssets() during a poller update). Before, the internal classes had access to private Locks.

    So, in short, breaking the classes out loses some of the encapsulation I like. But leaving them in can lead to some large java files. I've yet to find a good way to deal with this. C++ had the concept of "friends" which I've rarely missed, but would actually help in this case.

    Thoughts?

  • 0 投票
    11 回答
    88654 浏览

    c# - 如何在 C# 中为类名起别名,而无需向使用该类的每个文件添加一行代码?

    我想为类名创建一个别名。以下语法将是完美的:

    但它不会编译。


    例子

    注意此示例仅为方便起见而提供。不要试图通过建议改变整个系统的设计来解决这个特定的问题。此示例的存在或缺失不会改变原始问题。

    一些现有代码取决于静态类的存在:

    此配色方案是 Outlook 2003 配色方案。我想介绍 Outlook 2007 配色方案,同时保留 Outlook 2003 配色方案:

    但我仍然面临这样一个事实,即代码取决于一个名为ColorScheme. 我的第一个想法是创建一个ColorScheme我将从Outlook2003or继承的类Outlook2007

    但是您不能从静态类继承。

    我的下一个想法是创建静态ColorScheme类,但使Outlook2003ColorSchemeOutlook2007ColorScheme类非静态。然后静态类中的静态变量ColorScheme可以指向任一“真实”配色方案:

    但这需要我将一个完全由只读静态颜色组成的类转换为可覆盖的属性,然后我的ColorScheme类需要将 30 个不同的属性获取器转换为包含的对象。

    就是打字太多了。

    所以我的下一个想法是给这个类起别名:

    但这不编译。

    如何将静态类别名为另一个名称?


    更新:有人可以添加答案“您不能在 C# 中执行此操作”,因此我可以将其标记为已接受的答案。任何其他想要相同问题答案的人都会发现这个问题、已接受的答案以及许多可能有用或可能没有用的变通方法。

    我只想结束这个问题。

    0 投票
    6 回答
    4200 浏览

    c# - 对于需要引用其他类的类,C# 中的良好设计模式是什么?

    我正在处理 C#.NET 中的业务问题。我有两个类,名为 C 和 W,它们将在不同时间独立实例化。

    C 类的对象需要包含对 W 类的 0 ... n 个对象的引用,即一个 C 对象最多可以包含 n W 个对象。

    每个 W 对象都需要包含对 C 类的恰好 1 个对象的引用,即一个 W 对象包含在一个 C 对象中。

    C 类的对象通常首先被实例化。稍后,它的 W 内容被发现并实例化。稍后,我需要相互交叉引用 C 和 W 对象。

    什么是好的设计模式?实际上,我有涉及三个或四个类的案例,但我们可以讨论两个类以保持简单。

    我在想一些简单的事情,比如:

    这暂时可行,但我可以预见必须编写大量代码来跟踪所有引用及其有效性。我想在路上实现代码,只对容器进行浅刷新,对所有引用的类进行深度刷新。还有其他方法吗?它们的优点是什么?

    11/3 编辑:感谢所有人的好答案和好讨论。我最终选择了 jop 的答案,因为这与我想做的最接近,但其他答案也有帮助。再次感谢!

    0 投票
    2 回答
    24795 浏览

    java - 嵌套的 Java 枚举定义 - 声明为静态有什么不同吗?

    我有一个界面 - 这是一个精心设计的版本作为示例:

    Charge如果我将枚举定义为静态,那么它的实现方式会有什么不同- 即这是否有任何影响:

    0 投票
    5 回答
    11003 浏览

    c# - 通过 Web 服务序列化自定义对象中的名称/值对

    这是一个非常复杂的问题,当数据不是强类型时,如何通过 Web 服务调用序列化数据。我会尽量把它布置好。

    样本存储对象:

    样品用途:

    来自 Web 服务的返回值:

    我想要的是:

    原因和其他东西:

    首先,我很抱歉这篇文章的长度,但我也想提供可重现的代码。

    我想要这种格式,因为我正在使用 PHP 的 Web 服务。我想轻松地去:

    // 这很重要

    如果它是其他格式,那么我根本无法做到这一点。此外,在 C# 中,如果我正在使用该服务,我还希望能够执行以下操作:

    // 这很重要

    不幸的是,我不确定如何做到这一点。通过构建一个实现 IXmlSerializer 的自定义 Dictionary (请参阅StackOverflow:IXmlSerializer Dictionary),我能够以这种方式获得它,但是,它使 WSDL 模式脱离了水。它也太复杂了,并且在我的 WinFormsTester 应用程序中产生了可怕的结果!

    有没有办法做到这一点?我需要创建什么类型的对象?除了制作强类型集合/之外,还有什么方法可以做到这一点/?显然,如果我让它像这样强类型:

    然后它将完美运行,我不会有 WSDL 问题,我将能够轻松地从 PHP 和 C# (.OtherInfo.Hobbies) 访问它。

    但是,我将完全失去 NVP 的意义,因为我必须提前知道列表是什么,而且它是不可更改的……比如说,来自数据库。

    谢谢大家!!我希望我们能够为此提出某种解决方案。再次提出要求:

    1. WSDL 模式不应中断
    2. 名称值对 (NVP) 应序列化为属性格式
    3. 通过名称 ["Hobbies"] 应该很容易在 PHP 中访问 NVP
    4. 应该很容易在 C# 中访问(并且与它的代理生成器兼容)
    5. 易于序列化
    6. 不需要我强输入数据

    现在,我/完全/愿意输入更好/不同的方式来做到这一点。我正在存储一些相对“静态”的信息(如名称)和一堆数据。如果有更好的方法,我很想听听。

    0 投票
    12 回答
    824 浏览

    c# - ac# 类是否应该生成自身的实例?

    我有一个定义 CallRate 类型的类。我需要通过从文件中读取数据来添加创建类的多个实例的能力。

    我向我的类 CallRate 添加了一个静态方法,该方法返回一个List<CallRate>. 一个类可以通过调用自己的构造函数来生成自己的新实例吗?它有效,我只是想知道这是否是正确的做法。

    0 投票
    14 回答
    830 浏览

    c# - 在构造函数中进行冗长的操作是否被认为是糟糕的设计?

    我正在实现一个类来比较目录树(在 C# 中)。起初我在类的构造函数中实现了实际的比较。像这样:

    但是在构造函数中做一个可能冗长的操作感觉不“正确”。另一种方法是将构造函数设为私有并添加如下静态方法:

    你怎么看?您希望构造函数“快速”吗?第二个例子更好还是只是使类的使用复杂化?

    顺便提一句:

    我不会将任何答案标记为已接受,因为我认为没有正确答案,只有偏好和品味。

    编辑:

    只是为了澄清我的例子。我不仅对目录是否不同感兴趣,而且对它们的不同之处(哪些文件)感兴趣。所以一个简单的 int 返回值是不够的。cdragon76.myopenid.com 的答案实际上非常接近我想要的(+1 给你)。

    0 投票
    4 回答
    2845 浏览

    c++ - 如果抽象基类是接口,派生类构造函数中是否必须调用基类构造函数?

    是否有必要在派生类构造函数中调用基构造函数?