Objective c 关于代码清晰性和功能性

Objective c 关于代码清晰性和功能性,objective-c,Objective C,以下两种方法的作用是相同的。我想知道以下哪一项是首选的,为什么 从可读性的角度来看,这看起来更清晰,但是我不喜欢decks.playerDeck结构 -(void) playerMovedWithCard:(Card*) card { [decks removeCard:card fromDeck:decks.playerDeck]; [decks addCard:card toDeck:decks.inplayDeck]; } 显然更简单,但是删除或添加卡的想法似乎已经消失了

以下两种方法的作用是相同的。我想知道以下哪一项是首选的,为什么

从可读性的角度来看,这看起来更清晰,但是我不喜欢
decks.playerDeck
结构

-(void) playerMovedWithCard:(Card*) card {
    [decks removeCard:card fromDeck:decks.playerDeck];
    [decks addCard:card toDeck:decks.inplayDeck];
}
显然更简单,但是删除或添加
的想法似乎已经消失了(想想代码的读取器)

我倾向于第一个实现,因为在将来,
removeCard
的任务可能比简单地删除对象更复杂


你认为呢?

第一种方法更容易阅读,因为你的
牌组
是一个更有意义的对象。但是,通过
deck.playerDeck
deck.inplayDeck
并不理想:
从inplayDeck移除:
添加到layerdeck:
会稍微好一些


但是,第一种方法有一个明显的优点:您可以向
deck
对象的类添加
moveCardFromDeck:toDeck:
方法,避免将同一张
两次传递给两种不同的方法。

甚至最好隔离
卡片组
对象的功能,并删除
卡片组.playerDeck
卡片组.inplayDeck
的任何引用。这样,您就可以更改
牌组的类别
,而无需更改
playerMovedWithCard
中的任何代码

例如:

- (void)playerMovedWithCard:(Card*)card
{
    [decks moveToPlayerDeckTheCard:card];
    // OR [decks moveToInPlayDeckTheCard:card];
}
这样,
playerMovedWithCard
就不知道如何存储卡,甚至不知道移动卡时会发生什么

你可以根据你的应用程序的实际功能来改变这一点,但想法是尽量减少类之间的耦合

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