对于以下方案设计方法的任何帮助/指导,我将不胜感激。
我正在开发一个类,其中我有类,属性计算出来,如下所示;
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个属性,我需要布尔值 确定它是否位于顶部,中部或底部。
任何帮助/指导都将受到高度赞赏。
答案 0 :(得分:0)
bool
是一个字节类型,而TCHAR
取决于它的用法最多可以是两个字节。从内存大小和优化的角度来看,bool
更加优化和快速,因为它们是0或1.您应该已经提到了这一变化的目标。涉及很多方面。
答案 1 :(得分:0)
“更好”是主观的,正确的方法取决于你的意思。
在编写新代码时,我总是按照以下顺序在这些术语中定义“更好”:
由于这适用于您的代码,我可能会将其设计为对每个不同的属性使用单个bool
,而不是尝试使用OR
ed标志创建单个整数类型等。布尔是相互排斥的,然后我会用一个enum
来表达它们。
避免过早地微量优化代码非常重要,因为这样做必然会使事情变得更复杂,更不通用,也更难维护。但是,这并不是首先不选择正确算法的借口。
由于代码是针对真实的生产环境编写和测试的,因此我将分析我的代码并识别热点。如果我找到任何并将其识别为需要修复的事情,那么我的优先事项就会改变:
简单仍然相对重要,特别是在开始微优化时。优化代码片段很容易导致复杂性失控,使维护成为一场噩梦。不要完全放弃表演上的简洁。
答案 2 :(得分:0)
虽然不是设计中唯一要考虑的要点,但它通常是一个很好的格言
When doing something, do it once.
你有三个布尔值,控制你的物品的位置。这意味着要弄清楚项目的位置,您需要检查三个项目。此外,要设置项目的位置,您需要设置一个布尔值true
和两个布尔值false
。几乎每次做某事时,你似乎都会做三件事。
考虑一下
public enum VerticalPanelPosition {
TOP,
MIDDLE,
BOTTOM;
}
现在你只能有一个位置
private VerticalPanelPosition vPosition;
只需做“一件事,一次”
public void setPosition(VerticalPanelPosition position) {
vposition = position;
}
很抱歉Java语法,但考虑到上下文,我敢打赌你可以毫不费力地将它翻译成C#。
祝你在设计方面做得更好,这是一次又一小步,需要考虑很多事情。