Assegnare un nome a una classe che rappresenta una raccolta di oggetti di un'altra classe

2

Questo è sempre un problema per me. Dì, in un gioco, c'è una classe che rappresenta un veicolo spaziale nemico chiamato EnemySpacecraft e c'è una classe che rappresenta una raccolta di quelli, diciamo tutto ciò che esiste nel gioco. Questa classe può essere implementata come una semplice serie incapsulata di astronavi nemiche. Dare a questa classe un nome come EnemySpacecrafts è troppo simile alla forma singolare. Le mie altre idee sono ad es. AllEnemySpacecrafts o EnemySpacecraftCollection , ma non so quanto bene direi. Qual è un nome proprio da dare qui? C'è una convenzione di cui non sono a conoscenza?

    
posta Enn Michael 07.07.2017 - 23:13
fonte

4 risposte

1

Benvenuti in una parte peggiore di questo lavoro. Denominazione delle cose.

Ecco alcuni suggerimenti

1. Riusabilità

Diciamo che vuoi riutilizzare il conocetto di gruppo per diverse entità del gioco.

Potresti usare un nome base insieme a generici

- Raid<>:
  - Raid<EnemySpacecraft>
- Party<>
  - Party<EnemySpacecraft>
- Fleet<>
  ...

Rimangono fedeli al gergo dei giochi (Dio, quanto mi piacciono gli MMO).

2. Concretezza

  • EnemySpacecraftRaid
  • EnemySpacecraftParty
  • EnemySpacecraftFleet

Un vantaggio nell'assumere il suffisso Raccolta è che non si lega il nome solo all'idea di avere solo una collezione. Un Raid<?> potrebbe comportare comportamenti e attributi come qualsiasi altra entità dei giochi.

Ciò che mi piace di questo approccio è che stai spostando la lingua ubiquitaria del dominio (giochi) nel codice.

Se pensi che la lingua specifica del tuo dominio (la tua) non abbia importanza e tutto possa essere subordinato al linguaggio tecnico, allora ...

there's a class representing some collection of those, say all that exist in the game.

Il nome ideale sarebbe EnemySpacecrfatRepository . Ma ho la sensazione che non soddisfi le tue aspettative riguardo a questo argomento.

    
risposta data 07.07.2017 - 23:52
fonte
1

Penso che tu debba separare chiaramente ciò che la lista rappresenta da quale particolare istanza viene utilizzata per . Usando la sintassi Java, una collezione di veicoli spaziali potrebbe essere semplice come

List<Spacecraft> activeEnemies = ...
List<Spacecraft> enemyAttackForce = ...
List<Spacecraft> surrenderedEnemies = ...
List<Spacecraft> destroyedEnemies = ...

Se una lista di veicoli spaziali nemici ha metodi che hanno senso solo per le navi nemiche, allora scrivi con tutti i mezzi una classe che incapsula quel comportamento. Ma non mescolare i concetti. EnemySpaceCrafts e EnemySpaceCraftCollection sono nomi OK, se un po 'goffi (non ho un suggerimento migliore). AllEnemySpaceCraft non è così buono, in quanto suggerisce di non riutilizzare la classe quando hai bisogno di un'altra raccolta non correlata di veicoli spaziali nemici.

    
risposta data 08.07.2017 - 10:43
fonte
0

Perché è simile alla forma singolare? Preferisco di gran lunga forme plurali e singolari per differenziarmi - immagino di avere la mente allenata a cercare la "s", ma sono anche un grande fan di mantenere il junk dai nomi.

Non vorrei vedere la "Collezione" post-fissata su un nome ... Questa è una parolaccia. sfogliando il mio codice e la mia mente vorrebbe pensare hey che è una parola grossa, dovremmo prestare attenzione prima che io abbia la possibilità di pensare "oh questo è solo un plurale rappresentato con 9 altre lettere del necessario È confuso.

enemySpacecraft
enemySpacecrafts

Uno è singolare, l'altro è plurale. Non penso che possa diventare molto più semplice di così!

Tieni presente che il contesto del codice aiuta anche:

craft.Fire();
crafts.Each(x => x.Fire());

Aggiungere altro è solo intromettersi. Less is more, come si suol dire.

(trascurare il fatto che "astronave" è in realtà una parola singolare e plurale ... forse un povero esempio per l'argomento, ma ti viene l'idea)

    
risposta data 08.07.2017 - 15:23
fonte
-2

Mi piace pensare a un oggetto come a una collezione di uno. Sostengo questa nozione implementando metodi che funzionano sulle raccolte con metodi supplementari per gestire gli scalari; puramente per zucchero sintattico . Il metodo scalare raramente fa poco più che chiamare la sua controparte. Il metodo che funziona sulla collezione fa tutto il lavoro per sfruttare la potenza se il codice riutilizzabilità, sì!

Se lo implemento. rows ([] item) Molto probabilmente ho anche questo. row (int item). Ho usato questo modello di design per quasi due decenni e non ho ancora lamentele. La ragione non è la brevità, la freddezza o la magia, ma piuttosto la coerenza . Se hai la disciplina per essere coerente, non puoi sbagliare con uno stile ragionevole che scegli.

Trovo che la semplicità sia della massima eleganza quindi risparmio tutte le mie energie per la documentazione super elaborata: -)

    
risposta data 08.07.2017 - 02:29
fonte

Leggi altre domande sui tag