è un buon design

1

Ad esempio, ho un clan e un personaggio. C'è un personaggio che è il capo. Per dare al clan una caratteristica specifica, è richiesto un po 'di denaro dal personaggio.

Non voglio avere un accoppiamento troppo stretto. Al momento ho un membro nella classe clan come questo:

bool clan::give_rank(character* chr, int rank)
{ 
    if (!is_leader(chr.id()) || !chr->has_money(500))
       return false;

    this->rank_ = rank;
    chr->take_money(500); 
    return true;
}

Questo accoppiamento stretto? o forse dovrei avere una classe secondaria come un clan_mgr che connette entrambe le classi?

bool clan_mngr::give_rank(character* chr, int rank)
{ 
    clan* myclan = chr->get_clan(); 

    if (!myclan || !myclan->is_leader(chr.id()) || !chr->has_money(500))
       return false;

    myclan->rank_ = rank;
    chr->take_money(500);
    return true;
}

// O forse questo, che sembra ancora peggio imo:

bool character::give_rank_to_clan(int rank)
{ 
    clan* myclan = chr->get_clan(); 

    if (!myclan || !myclan->is_leader(id()) || !has_money(500))
       return false;

    myclan->rank_ = rank;
    TakeMoney(500);    
    return true;
}
    
posta Gam 16.06.2016 - 06:30
fonte

1 risposta

1

Il tuo primo approccio sembra buono. Clan / personaggio è una relazione di contenitore e quindi l'approccio ideale sarebbe che il Clan ha una lista di membri, e il personaggio non è consapevole della classe di Clan. Ciò significa che l'API del personaggio deve essere progettata in modo che Clan possa implementare i suoi servizi.

    
risposta data 16.06.2016 - 11:32
fonte

Leggi altre domande sui tag