Disattiva o Abilita funzionalità nell'applicazione C #

0

Mi è stata fatta questa domanda durante l'intervista, ma non ho trovato risposta ovunque:

Diciamo che un'applicazione ha una funzione che si sbloccherà a diverse funzionalità per il cliente diff, diciamo aggiunta, cancellazione, modifica consentita solo per user1 user2 e user3, quindi ho già scritto il codice per tutte le funzionalità e creato exe, ma quando alcuni clienti paga extra Attivazione per aggiunta modifica per esempio funzionalità come accade nei giochi, ho trovato è impossibile fare da file di configurazione? Ho suggerito di scrivere il caso switch in codice e modificare userlevel nel file di configurazione. Ma non sono sicuro. C'è un modo per fare il problema sopra usando OOPS e il file di configurazione.

    
posta murmansk 03.05.2017 - 16:50
fonte

4 risposte

3

Ci sono molte soluzioni al problema generale che presenti. Non entrerò in svantaggi o vantaggi, solo enumerare alcuni modi per esplorare ulteriormente, e in nessun modo mi aspetto di essere esaustivo

Opzioni di input (per definire quali opzioni attivare / disattivare):

a) File di configurazione

a.1 - aggiungi variabili di commutazione (molte variabili di caratteristiche, ciascuna vera / falsa)

a.2 - aggiungi l'elenco di stringhe di caratteristiche (ad esempio "caratteristiche"="funzionalità1, funzionalità2, funzione4" implica che la funzione 3 è disabilitata)

b) Tabella del database

b.1 - tabella singola con una riga per caratteristica

b.2 - riga singola con un elenco di funzioni

b.3 - più tabelle, ad esempio relative agli utenti e alle funzioni

c) Registro di sistema (generalmente simile alle soluzioni di configurazione, ma può essere utilizzato come database tramite sottochiavi)

d) File proprietario (simile a config ma si definisce una struttura di file specifica)

e) Servizio Web (il programma si connette a un servizio per ottenere la configurazione, quindi simile al file di configurazione). Particolarmente comune per le app mobili

e.1 - riceve JSON

e.2 - riceve XML

e.3 - formato proprietario

Opzioni di elaborazione (per definire come eseguire l'abilitato / disabilitato):

a) Imposta variabili booleane, usa se su percorsi di codice specifici

b) Istruzione switch (la soluzione)

c) Modello di strategia

d) Applica pattern IoC in cui carichi un processore specifico in base alla configurazione

    
risposta data 05.05.2017 - 19:11
fonte
2

Certamente puoi farlo impostando le impostazioni nel file di configurazione. Tecnicamente, è possibile.

Il più grande svantaggio è che tutti possono modificare quel file molto facilmente . Questo è l'intero punto di un file di configurazione.

Supponendo che diversi clienti paghino somme di denaro diverse per ottenere tali funzioni, potresti voler disporre di mezzi più sicuri per garantire l'accesso alle funzionalità. Ci sono molti modi per farlo, la configurazione non è uno di questi.

    
risposta data 03.05.2017 - 16:55
fonte
2

Qui ci sono due domande.

Il primo è l'implementazione di funzionalità che possono essere attivate / disattivate. Questo è solo un modo complesso di un argomento e dipende molto dalla tua applicazione, dal suo design e dalle sue funzionalità che devono essere attivate.

Il secondo è consentire funzionalità per solo clienti specifici. In questo caso, stai cercando un qualche tipo di schema di licenza. Ci sono servizi / librerie (a pagamento) che offrono licenze "difficili da decifrare". Nel qual caso la tua applicazione consulta questo servizio / libreria se il cliente corrente ha bisogno di licenza. Ma è davvero un problema per le applicazioni che il cliente esegue da solo. Se la tua applicazione è un servizio web che usi sui tuoi server, diventa banale come interrogare il tuo DB cliente e controllare se ha il ramo della funzione.

    
risposta data 04.05.2017 - 08:23
fonte
2

La soluzione comune è progettare e implementare alcune librerie di licenze, probabilmente complete di un server di licenze, chiavi di licenza specifiche per macchina, ecc. Le chiavi contengono informazioni crittografate sul cliente, sulla macchina e sui livelli di funzionalità acquistati per questo chiave.

La soluzione corretta è acquistare una soluzione di licenza che faccia quanto sopra (con molti meno bug) e integrarla.

La soluzione rapida fino a che uno dei due precedenti è implementato è di usare una semplice voce non documentata in un file di configurazione locale (dove "file" è una metafora per qualsiasi tipo di archiviazione), possibilmente oscurato con qualche forma di offuscamento banale.

    
risposta data 05.05.2017 - 19:28
fonte

Leggi altre domande sui tag