I file / dati dovrebbero seguire regole come "principio aperto-chiuso"?

3

Il "principio open-closed" include anche file e dati dell'app? Secondo il link , si dice che file e dati non sono inclusi, ma non menziona se dovrebbero essere incluso.

Supponiamo di avere 2 modi per definire la stringa locale della mia app:

Metodo 1: tutte le stringhe locali in un singolo file:

locale.json

{
    'title':{
        'en':'Welcome',
        'es':'bienvenida'
    },
    'hello_message':{
        'en':'Welcome to use the app',
        'es':'Bienvenido a usar la aplicación'
    }
}

pseudo codice per caricare le impostazioni internazionali: carica local.json direttamente

come aggiungere una nuova localizzazione: modifica locale.json, aggiungi una nuova chiave a ogni stringa

Metodo 2: un json per ogni locale

locale_en.json

{
    'title':'Welcome',
    'hello_message':'Welcome to use the app'
}
locale_es.json

{
    'title':'bienvenida',
    'hello_message':'Bienvenido a usar la aplicación',
}

codice pseudo per caricare le impostazioni internazionali: cerca e carica tutti i file locali_xx.json nella cartella dati app specifica

come aggiungere una nuova locale: aggiungi un nuovo file locale_xx.json nella cartella dati app specifica

La mia domanda è, supponiamo che potrei aver bisogno di aggiungere una nuova localizzazione in futuro, e il codice da maneggiare rimane invariato, il metodo 2 è preferito perché segue il principio "open-closed?

    
posta mmmaaa 02.03.2018 - 02:55
fonte

1 risposta

4

Si tratta di qualcosa di più del principio aperto e chiuso. Si tratta di prevedere il cambiamento. Prevedere il cambiamento è difficile.

Metodo 1 (un singolo file) semplifica l'aggiunta di nuove funzionalità. Rende difficile aggiungere nuove lingue.

Il metodo 2 (un file per ogni lingua) semplifica l'aggiunta di nuove lingue, ma è difficile aggiungere nuove funzionalità.

Lo chiamo problema interleaving. Il tuo file di configurazione è disposto linearmente in modo che abbia una dimensione. Ma sei soggetto a cambiare da due dimensioni.

Puoi definire la tua configurazione in due dimensioni, utilizzare gli strumenti di modifica che la presentano in due dimensioni, gestire l'interleaving quando accade o cercare di forzare il futuro a comportarsi come ti aspetti. Dopo decenni a questo posso dire che il futuro fa come vuole.

Un trucco subdolo che ho usato è di abusare del file system creando un'intera cartella nella tua configurazione. Riempi con file denominati title.en e title.es . Quindi puoi ordinarlo in entrambi i modi.

Ho visto persone risolvere questo con fogli di calcolo o database, ma preferisco usare una soluzione leggera se posso.

Il principio aperto e aperto si basa sull'idea di organizzare in modo che il cambiamento possa avvenire senza dover modificare ciò che già funziona. Che ci crediate o no, il trucco subdolo lo segue abbastanza bene.

    
risposta data 02.03.2018 - 06:13
fonte

Leggi altre domande sui tag