Uso ambiguo di "Utente"

-3

In uno dei miei progetti, dovevo nominare alcune variabili e funzioni che appartengono alla persona che utilizza la mia app. Li ho denominati userCard , getUserInventory() e così via. Li ho chiamati così perché c'erano variabili e funzioni che appartenevano ad altre persone, come opponentCard , getAllyInventory() ecc.

Ora, ho una classe del modello chiamata User , che contiene informazioni sull'account per un utente specifico. Come altre variabili e funzioni, questo modello può appartenere alla persona che utilizza la mia app, così come il suo avversario e alleato. Se seguo le convenzioni precedenti, devo nominarli userUser , getUserUser() , opponentUser , getAllyUser() ecc., Che non mi piace, specialmente userUser e getUserUser() ones.

Quale strategia dovrei seguire, supponendo che non sia possibile modificare i nomi dei modelli, ma solo i prefissi (utente-, avversario-, alleato-)?

    
posta Ehtesham Hasan 18.02.2018 - 18:01
fonte

3 risposte

2

Ho finito per utilizzare proprio come prefisso.

Quindi le variabili e le funzioni appartenenti all'utente sono denominate come ownCard , ownUser , getOwnInventory() . Le variabili e le funzioni appartenenti ad altri sono invariate ( opponentUser , opponentCard , getAllyInventory() ).

    
risposta data 19.02.2018 - 10:47
fonte
1

Sembra che la tua app sia un gioco multi-giocatore competitivo e tu vuoi discriminare tra "qualsiasi utente" da un lato e "l'utente da questo lato dell'app" dall'altro.

Tutti gli utenti sono giocatori o concorrenti o partecipanti. Eviterei del tutto il termine utente generico, ha un aspetto più professionale. Che ne pensi di ThisPlayer o PlayerZero per il giocatore in possesso del dispositivo su cui viene eseguita l'app?

    
risposta data 18.02.2018 - 19:26
fonte
0

Se stai utilizzando un linguaggio orientato agli oggetti, l'approccio all'avanguardia consiste nel definire un'interfaccia:

interface IUserRepository
{
    User GetCurrentUser();
    User GetSpecificUser(Expression<User,bool> expression);
}

Quindi devi creare un oggetto che implementa l'interfaccia e inserirla nel controller di gioco:

class EquipmentController
{
    private readonly IUserRepository _users; //Injected

    public EquipmentController(IUserRepository userRepo)
    {
        _users = userRepo;
    }

    public void EquipBestSword()
    {
        _users.GetCurrentUser().GetInventory()
           .Where
           (
               i => i.Name.Contains("Sword")
           )
           .OrderByDescending
           (
               i => i.Damage
           )
           .Equip();
    }
}

In questo modo puoi prendere in giro l'utente e l'inventario per testare la tua logica.

//Arrange
var mockWeapon = new Weapon { Name = "Sword", Damage = 100 };
var mockUsers = new MockUserRepository();
mockUsers.CurrentPlayer = new User
{
    Inventory = new List<GameItem>
    {
        mockWeapon
    }
}
var equipment = new EquipmentController(mockUsers);

//Act
equipment.EquipBestSword();

//Assert
Assert.IsTrue(mockWeapon.IsEquipped);
    
risposta data 19.02.2018 - 11:13
fonte

Leggi altre domande sui tag