私は、主にJavaとC#で、クリーンなコーディングに関するアジャイルな本を読んでいます。データクラスとロジック/オブジェクトクラスを区別するという概念を検討します。私はC++で次のような状況にあり、どのバリアントがクリーンなコードであるかを判断できません。いくつかの属性を持つPlaneクラスがあり、そのうちの1つだけが変更されると、これらの属性が変更されます。
最初の方法
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();
}
};
これは私には理にかなっています。ユーザーにとって、彼は1つのメソッドを呼び出すだけであり、クラスの内部作業を気にする必要がないからです。しかし、これはデータクラスの違反であり、ロジックが含まれています。
2番目の方法
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);
}
2番目のメソッドは、実際にはデータクラスを実装から分離しますが、クラスユーザーの責任が増し、追加の呼び出しを強制されます。私の理解では、2番目の方法はアジャイルPOVからの正しい方法ですが、最初の方法を使用する方が論理的です。
2つの方法のどちらがあなたたちにとって理解して使用するのがより理にかなっているのか知りたいです
よろしく