我一直在阅读一本关于清晰编码的敏捷书,主要是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中的正确方法,但我发现第一种方法更符合逻辑。
我想知道这两种方法中的哪一种对你们来说更有意义,并且使用
此致
答案 0 :(得分:-1)
在这种情况下,我认为你应该更喜欢第一种方法。
setBBox(bbox);
调用后使用第二种方法确实会使对象移动到某种不正确的状态。 但是,“逻辑课程方式”可以在另一种情况下发生。
Tractor
的新类并将其用作tractor.move(plane)