以下两种方法在它们的作用方面是相同的。我想知道以下哪一个是首选的,为什么?
从可读性角度看,这看起来更清晰,但我不喜欢decks.playerDeck
构造
-(void) playerMovedWithCard:(Card*) card {
[decks removeCard:card fromDeck:decks.playerDeck];
[decks addCard:card toDeck:decks.inplayDeck];
}
绝对简单,但card
被删除或添加的想法似乎丢失了(想到代码的读者)
-(void) playerMovedWithCard:(Card*) card {
[decks.playerDeck removeObject:card];
[decks.inplayDeck addObject:card];
}
我倾向于第一个实现,因为将来removeCard
的任务可能更复杂,然后只需删除一个对象。
您怎么看?
答案 0 :(得分:1)
第一种方式稍微容易阅读,因为decks
用作更有意义的对象。但是,传递decks.playerDeck
和decks.inplayDeck
并不理想:removeFromInPlayDeck:
和addToPlayerDeck:
稍微好一些。
第一种方法有一个明显的优势:你可以在moveCardFromDeck:toDeck:
对象的类中添加deck
方法,避免传递相同的{{1}两次到两种不同的方法。
答案 1 :(得分:1)
最好甚至隔离decks
对象的功能,并从decks.playerDeck
中移除decks.inplayDeck
和playerMovedWithCard
的任何引用。这样,您就可以更改decks
的类,而无需更改playerMovedWithCard
中的任何代码。
例如:
- (void)playerMovedWithCard:(Card*)card
{
[decks moveToPlayerDeckTheCard:card];
// OR [decks moveToInPlayDeckTheCard:card];
}
这样,playerMovedWithCard
就不知道如何存储卡片,甚至不知道卡片被移动时会发生什么。
您可以根据应用实际执行的操作进行更改,但其目的是尽量减少类之间的任何耦合。