【发布时间】:2017-08-09 18:35:20
【问题描述】:
我有以下奇怪的问题。假设我们有一个 BlackJackGame 类,该类包含用于选举获胜者的 BlackJackGame 算法。同一个类虽然包含启动游戏的主要方法。这种主要方法在某种意义上违反了类的单一职责原则。此外,假设我们放置了另一种方法来以某种格式打印获胜者。可以说这个方法也是静态的,这个方法是否比main方法更违反责任原则。然后是什么,假设我们说它正在破坏。这是否意味着我们应该创造。现在假设我们还有一个实用方法,它解析来自命令行的参数并将其也放置为静态方法。
1 个 Main 类保存 Main 方法,1 个 Print 类保存 Print 方法,1 个 ArgumentParser 类保存一个静态方法来解析参数。
我会把它想象成这样:
public class BlackJackGame{
//returns the wining player
public Player play(Deck deck) {
// some logic here
}
// deck is a class holding the Deck.
public static Deck parseArguments(String args[]) {
// logic here
}
public static void printPlayer(Player winner) {
// some logic here
}
public static void main(String args[]) {
Deck deck = createDeck(args);
BlackJackGame game = new BlackJackGame();
Player winner = game.play(deck);
printWinner(winner);
}
}
如果我们遵循单一职责原则。如果我们有,这是否重要,是否更正确:
public class BlackJackGame{
//returns the wining player
public Player play(Deck deck) {
// some logic here
}
}
public class Main{
public static void main(String args[]) {
Deck deck = DeckCreator.createDeck(args);
BlackJackGame game = new BlackJackGame();
Player winner = game.play(deck);
Printer.printWinner(winner);
}
}
这不是有点极端吗????就像把单一职责带到四肢?
我问这个问题是因为它在我在这里请求的代码审查期间弹出。 codereview.stackexchange.com/questions/172469/… 老实说,我有点觉得单一责任原则有点极端。
【问题讨论】:
-
我的意见 - 不要仅仅为了符合一些关于如何处理代码的命名一般准则而修改你的代码。
-
我不会费心创建一个单独的课程,特别是对于像二十一点游戏这样的小规模游戏,但这个问题是基于意见的。请记住,编程中几乎没有绝对规则。
-
SRP 规则始终取决于上下文。有人会说一件事,另一件事会说不同
-
讨论现代美国政治也是一个有趣的讨论,我们都可以从中学到很多东西。它也不属于这里。
-
ImO:SRP 是编码中非常重要的原则。但是每个单一职责都包含多个“子职责”。问题是,你能用一种简单的方式来制定一个模块的职责吗?还有其他模块的职责重叠吗?那么你应该重新考虑你的程序结构。
标签: java oop single-responsibility-principle