区分敏捷中的数据类和逻辑类
Differentiating between data class and logic class in agile
本文关键字:数据 更新时间:2023-10-16
我一直在读一本关于干净编码的敏捷书籍,主要是用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中的正确方法,但我发现第一种方法更符合逻辑。
我想知道这两种方法中哪一种对你们来说更有意义
问候
在这种情况下,我认为您应该更喜欢第一种方法而不是第二种方法。
- 方法调用应该将对象从一个正确的状态转换为另一个正确状态。在
setBBox(bbox);
调用后使用第二种方法,对象确实会移动到一些不正确的状态
然而,"逻辑课堂方式"可能发生在另一种情况下。
- 考虑一下你应该把飞机从机库移到停机坪。现在,引入名为
Tractor
的新类并像使用tractor.move(plane)
一样使用它将是很自然的
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 在运行时处理类型擦除的数据-如何不重新发明轮子