所以我在过去的一年里一直在开发一个UI工具包,而我的Window类已经达到了类的大小(通过sizeof)为540字节的程度。
我在想,既然不是所有的窗口都有子节点,我可能会将处理子节点(它的对齐等)的部分代码拆分成一个单独的类并指向它。与文本,图标和滚动等相同。
这是推荐的做法还是有什么我公然缺席的?
答案 0 :(得分:2)
面向对象的类设计应该基于手头问题的抽象,而不是编译代码的字节大小。如果做得太多,我会分手。
540字节?你真的在这里意味着kbytes吗?这对我来说似乎并不过分。
答案 1 :(得分:2)
类实例大小不是代码复杂性的可靠指标。一个过于复杂的类可以很容易地与一个精心设计的类相同的大小,该类由几个具有明确职责的小对象组成。
使用合成的类可以将组合对象实例化为成员变量(导致实例大小更大),或者它可以包含指向使用new
运算符分配的对象的指针。后一种方法有好处,例如物理去耦,多态,不支付你不使用的功能,但它也有缺点,例如内存碎片增加,内存分配器开销增加,空间局部性降低。
答案 2 :(得分:2)
首先,对象实例的大小本身并不重要。该类应设计为具有单一责任,如果需要540字节的数据,那么就是这样。
然而,540字节是一个非常大的数字。它是135个整数或指针。它类似于22 std::vector
s。我很难想象单个责任区域可能需要这么多物体。但同样,尺寸本身不是问题。问题是如果你的班级负责的比你应该做的更多。
我在想,既然不是所有的窗口都有子节点,我可能会将处理子节点(它的对齐等)的部分代码拆分成一个单独的类并指向它。与文本,图标和滚动等相同。
听起来你基本上只有一个EverythingUI课程。是的,这是糟糕的设计。将其拆分为 原因。处理文本与处理图标或滚动无关或......将它们放在不同的类中。
答案 3 :(得分:0)
我不担心班级的原始大小。不过,我会考虑使用PIMPL idiom或D-pointer。
答案 4 :(得分:0)
我可能误解了您的问题,但您可能需要查看policy-based design和/或component-based design,这两个问题都与使用较小的功能部分制作更大的类有关。
从你所说的关于拆分某些功能并指向它的指示,听起来像基于组件的设计是你想到的方向。