代码清晰度和功能

时间:2012-03-06 15:26:55

标签: objective-c

以下两种方法在它们的作用方面是相同的。我想知道以下哪一个是首选的,为什么?

从可读性角度看,这看起来更清晰,但我不喜欢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的任务可能更复杂,然后只需删除一个对象。

您怎么看?

2 个答案:

答案 0 :(得分:1)

第一种方式稍微容易阅读,因为decks用作更有意义的对象。但是,传递decks.playerDeckdecks.inplayDeck并不理想:removeFromInPlayDeck:addToPlayerDeck:稍微好一些。

第一种方法有一个明显的优势:你可以在moveCardFromDeck:toDeck:对象的类中添加deck方法,避免传递相同的{{1}两次到两种不同的方法。

答案 1 :(得分:1)

最好甚至隔离decks对象的功能,并从decks.playerDeck中移除decks.inplayDeckplayerMovedWithCard的任何引用。这样,您就可以更改decks的类,而无需更改playerMovedWithCard中的任何代码。

例如:

- (void)playerMovedWithCard:(Card*)card
{
    [decks moveToPlayerDeckTheCard:card];
    // OR [decks moveToInPlayDeckTheCard:card];
}

这样,playerMovedWithCard就不知道如何存储卡片,甚至不知道卡片被移动时会发生什么。

您可以根据应用实际执行的操作进行更改,但其目的是尽量减少类之间的任何耦合。