2012-03-06 55 views
1

以下两种方法在它们的功能方面是相同的。我想知道以下哪项是首选,为什么?关于代码清晰度和功能

这看起来与可读性的立场来看吸尘器,但是我不喜欢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任务可能更多地参与则只需删除的对象。

您认为如何?

回答

1

第一种方式比较容易阅读,因为decks可以作为更有意义的对象。但是,通过decks.playerDeckdecks.inplayDeck并不理想:removeFromInPlayDeck:addToPlayerDeck:会略好。

还有一定的优势,这样做,虽然第一种方式:你可以一个moveCardFromDeck:toDeck:方法添加到您的类对象deck的,避免了需要通过同card两次,以两种不同的方法。

1

甚至隔离decks对象的功能并从playerMovedWithCard删除任何参考decks.playerDeckdecks.inplayDeck更好。这样,您可以更改decks的类别,而无需更改playerMovedWithCard中的任何代码。

例如:

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

这样,playerMovedWithCard不知道卡的存储方式,甚至当卡被移动会发生什么。

你可以根据你的应用程序的实际情况来改变它,但想法是尽量减少类之间的耦合。