1
這個遊戲的源代碼是開源的,所以我決定去看看。在這裏面,我覺得是這樣的:德米特法和平移法
// This ActionManager is basically a controller like in the MVC pattern.
void ActionManager::HandleQueryMessage(csString xml, Client* client)
{
//check the two hands as a start.
psItem* item = client->GetCharacterData()->Inventory().GetInventoryItem(PSCHARACTER_SLOT_RIGHTHAND);
if(!item || !item->GetItemCommand().Length())
item = client->GetCharacterData()->Inventory().GetInventoryItem(PSCHARACTER_SLOT_LEFTHAND);
}
第一行獲得項目明顯違反迪米特法則。然而,即使它被改爲client->GetCharacterData()->GetInventoryItem(PSCHARACTER_SLOT_RIGHTHAND);
,它仍然違反德米特法(據我所知)。
可以做些什麼呢?或者這是LOD不適用的地方之一(就像我的第二個例子)?
將GetInventoryItem
移動到client
類沒什麼意義,因爲客戶端與character
沒有任何關係。
在client
類中爲character
類看起來矯枉過正的所有xx方法創建包裝。
有什麼想法?
「得墨忒耳定律」實際上是一個「得墨忒耳準則」。對Stack Overflow來說,這個問題有些過於主觀,因爲它是編碼風格的問題,人們更傾向於設計某些功能。如果您想要查看高質量的開源遊戲代碼庫,請嘗試Doom 3:http://fabiensanglard.net/doom3/ –
@DietrichEpp平移源是服務器端。厄運只是客戶端。 – James
這是不正確的。 Doom 3源不僅僅是客戶端。 –