【发布时间】:2013-03-05 01:55:51
【问题描述】:
我最近阅读了an article that describes,他们显然可能会破坏 SRP。现在我完全糊涂了,因为我用 setter 和 getter 编写了很长一段时间的单个类。
另外,我有 found this,但它与 SRP
无关嗯,乍一看,getter 和 setter 都没有违反单一职责原则,因为它们的逻辑只“属于”当前类。他们可以访问/写入“服务”单一目的的类成员。很好。
但等等,让我们先定义基本术语:
数据访问 = setter 和 getter
数据处理 = 数据处理、CRUD 等操作、验证等
如果是这样,那么我们在一个类中有两个不同的职责,从而破坏了 SRP。
让我们假设一下,为了不破坏 SRP,我们将在不同的类中定义数据访问和数据操作。
class DA { // <- Data Access
public string getName() {
return this.name;
}
public string setName(name) {
this.name = name;
}
}
class DataHandler {
public DataHandler(da) { // <- Inject an instance of DA
this.da = da;
}
public bool validate() {
// validation stuff
}
}
看起来不错,因为我们没有违反上述 SRP。但是在这里,我在 DA 类中只有一个 setter 和一个 getter。
现在的问题:
1) 即使我只有一个 setter 和 getter,我是否应该始终创建另一个 DA 类,以免破坏 SRP?
2) setter 和 getter 真的会破坏 SRP,它们不应该在任何类中使用吗?
3) 如果是这样,依赖注入总是答案!?
【问题讨论】:
-
:/ 你可能应该编辑过。如果你要打破 SRP,你绝对应该选择 DI。组合优于扩展,等等。
-
如果您查看我之前的评论(以及我的 pastebin 答案),您可能知道我来自哪里。
-
即使他们没有破坏 SRP 他们仍然不是干净的恕我直言。问题在于命名,如果你有一个名为“name”的getter setter,那么函数名中就不再有动词。您可以使用“getSetName”,但它有两个动词和尖叫“做不止一件事”。我还认为,由于奇怪的命名,它违反了最小惊讶原则。
标签: dependency-injection solid-principles single-responsibility-principle