0

对于以下程序设计方法,我将不胜感激。

我正在开发一个类,其中我有类,属性计算出来,如下所示;

class PanelBlock{

    public: 
        PanelBlock();

    private:
        TCHAR m_sSlope[PANEL_NAME_LENGTH];  // To store the Slope

        bool m_bTopPanel;     // This is to identify the
        bool m_bMidPanel;     // location of the PanelBlock.
        bool m_bBotPanel;

        // Similarly we have it for other attributes.
        // My Question here is, 
        // Is it better to have a TCHAR instead of 3/5 booleans here?

        TCHAR m_sPanelLocation[PANEL_LOCATION_LENGTH];

}

我的问题是,

在这里使用TCHAR/String而不是 3/5 布尔值会更好吗?在我的应用程序代码中,我只会将TCHAR/String与特定 的TCHAR/String进行比较,比如位置是否为 TOP,执行任务 A,或者使用布尔值是否有我缺少的任何优势?

另外,我有大约 8 个属性,我需要布尔值来确定它是在Top、middle 还是 bottom

任何帮助/指导将不胜感激。

4

3 回答 3

0

“更好”是主观的,正确的方法取决于你的意思。

在编写新代码时,我总是按以下顺序用这些术语定义“更好”:

  1. 简单。 清晰、易于理解的代码比复杂、模糊的代码更好,因为它更易于扩展和修复。
  2. 通用性。通用代码比适用范围很窄的代码要好,因为它减少了您必须编写的代码量。希望这反过来会减少您必须修复的错误数量。
  3. 速度效率。快代码比慢代码好。
  4. 空间效率。更少的内存使用比更多更好。

由于这适用于您的代码,我可能会将其设计为对每个不同的属性使用单个bool,而不是尝试使用 ed 标志创建单个整数类型OR等。如果布尔值是互斥的,那么我将使用enum单个把它们都表达出来。

避免过早地对代码进行微优化很重要,因为这样做必然会使事情变得更复杂、更不通用且更难维护。然而,这并不是不首先选择正确算法的借口。

由于代码是针对真实生产环境编写和测试的,我将分析我的代码并识别热点。如果我发现任何问题并将它们确定为需要修复的东西,那么我的优先级就会转移:

  1. 速度效率。快代码比慢代码好。
  2. 空间效率。更少的内存使用比更多更好。
  3. 简单。 清晰、易于理解的代码比复杂、模糊的代码更好,因为它更易于扩展和修复。
  4. 通用性。通用代码比适用范围很窄的代码要好,因为它减少了您必须编写的代码量。希望这反过来会减少您必须修复的错误数量。

简单性仍然相对重要,尤其是在开始进行微优化时。优化代码片段很容易导致复杂性失控,使维护成为一场噩梦。不要在性能的祭坛上完全放弃简单。

于 2013-11-04T15:53:08.180 回答
0

虽然不是设计中要考虑的唯一要点,但它通常是一个很好的格言

When doing something, do it once.

你有三个布尔值,控制你的项目的位置。这意味着要确定项目的位置,您需要检查三个项目。此外,要设置项目的位置,您需要设置一个 booleantrue和两个 boolean false。看起来你几乎每次做某事都会做三件事。

考虑这个

public enum VerticalPanelPosition {
   TOP,
   MIDDLE,
   BOTTOM;
}

现在您只能拥有一个位置

private VerticalPanelPosition vPosition;

并且只需要做“一件事,一次”

public void setPosition(VerticalPanelPosition position) {
  vposition = position;
}

很抱歉 Java 语法,但考虑到上下文,我敢打赌你可以毫不费力地将它翻译成 C#。

祝你在设计上变得更好,这是一次一小步,有很多事情需要考虑。

于 2013-11-04T16:08:23.727 回答
0

bool是一个字节类型,而TCHAR根据它的用途,最多可以是两个字节。从内存大小和优化的角度来看,bools 更加优化和快速,因为它们不是 0 就是 1。你应该提到你的目标是发生这种变化。涉及很多方面。

于 2013-11-04T15:46:18.030 回答