Abbiamo un servizio web esistente che è attualmente modellato come un singolo progetto, in cui le classi di web / service / manager / modello sono diventate un po 'confuse e mescolate. Come refactoring, stiamo separando i pezzi per la manutenzione a lungo termine.
Mentre ci prepariamo, ho assemblato un elenco di "linee guida" da applicare al design del livello di servizio, e uno di questi è:
Service-level parameters should **only** be primitives.
Significato con una classe (codice pseudo-Java):
class Account {
public enum AccountType {
PERSONAL, BUSINESS
}
public Account(String name, AccountType type) { ... }
}
Il tuo metodo di servizio potrebbe essere simile a:
class AccountService {
public Result createAccount(String accountName, String accountType) {
AccountType type = AccountType.valueOf(accountType);
// TODO: Business-level validation for duplicate names, etc.
Account newAccount = new Account(accountName, type);
return accountManager.save(newAccount);
}
}
La mia domanda è: quel parametro accountType
a livello di servizio dovrebbe essere un primitivo, o dovrebbe essere il AccountType
enum type?
Ragioni per le primitive:
- Il livello di servizio può eseguire la convalida se gli assegni un tipo non risolvibile
- Se migri i tipi, il livello di servizio può fornire la compatibilità all'indietro
Motivi per i tipi di modello:
- Durante la scrittura di test a livello di servizio, un AccountType errato è un errore di compilazione
- Le affermazioni casuali che creano tutti i tipi di account non funzionerebbero se ne manchi una (ad esempio aggiungi un nuovo
AccountType
e dimentica di scriverne un test)
La domanda che cerco di pormi è se entrambe le API REST e di uno strumento CLI sono posizionate sopra il livello di servizio, cosa le rende facili da scrivere?
Quindi, c'è una preferenza / principio guida qui?