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];
}