我一直在阅读一本关于干净编码的敏捷书,主要是用 Java 和 c# 编写的。考虑区分数据类和逻辑/对象类的概念。我在 c++ 中有以下情况,我无法确定哪个变体是干净的代码。我有一个带有一些属性的 Plane 类,当只有其中一个属性发生变化时,这些属性会发生变化,所以
第一种方法
class Plane3D {
public:
BBox bbox;
float l,w,h;
void setbbox(BBox bbox) {
this->bbox = bbox;
recalculateLWH();
}
void setLWH(float l, float w, float h) {
//set here
recalculateBBOX();
}
};
这对我来说很有意义,因为对于用户来说,他只是调用一种方法,而不必关心类的内部工作。但这违反了数据类,因为它包含逻辑现在
第二种方法
class Plane3D {
public:
BBox bbox;
float l,w,h;
void setbbox(BBox bbox) {
this->bbox = bbox;
}
void setLWH(float l, float w, float h) {
//set here LWH
}
};
int main() {
BBox bbox;//init here
Plane plane;
plane.setBBox(bbox);
recalculateLWH(plane);
}
现在第二种方法实际上将数据类与实现分开,但它增加了类用户的责任并迫使他进行额外的调用。据我了解,第二种方法是敏捷 POV 中的正确方法,但我发现第一种方法使用起来更合乎逻辑。
我想知道这两种方法中哪一种更适合你们理解和使用
问候