假设我有一个 PaintClass 类,其中包含 Paint 方法,它用于使用属性 shape 绘制 Container 小部件。这个PaintingClass应该显示带有文本和颜色的多边形,即它应该包含顶点数、绘制形状的名称、背景颜色等参数。而且我需要保留绘画形状然后恢复它们来显示。
在
PaintingClass
中声明所有必需的属性并直接使用它来绘制 Container
并在某些控制器中保存 JSON 是否明智:
class PaintingClass extends ShapeBorder {
PaintingClass({
this.name,
this.color,
});
PaintingClass.fromJson(Map<String, dynamic> json);
final String? name;
final Color? color;
...
@override
void paint() {
...
}
Map<String, dynamic> toJson() {
...
}
}
或创建一个类
PaintingClassInfo
,将由控制器和持久性使用
class PaintingClassInfo {
PaintingClassInfo({
this.name,
this.color,
});
PaintingClassInfo.fromJson(Map<String, dynamic> json);
final String name;
final Color? color;
...
Map<String, dynamic> toJson() {
...
}
}
并且将被传递到绘画课
class PaintingClass extends ShapeBorder {
PaintingClass(this.data);
final PaintingClassInfo data;
@override
void paint() {
...
}
}
哪个将在小部件树中使用?
如果将这些功能分开,会更好,这样会产生内聚的松散耦合模块。
许多术语与 SRP 具有相同的含义,例如:SOC、内聚和耦合。
他们是相似的,至少在目标上
让我们描述一下凝聚力:
这是SRP的灵感来源,它意味着模块元素之间的功能相关性。
这些元素的相关程度表明该模块的内聚程度。
现在你的问题来了,绘制方法与正在绘制的小部件有多少相关性,即使它是相关的。
如果该功能可以分离,那就去做吧。
希望对您有帮助。