Dove mettere la logica aziendale se si utilizza Firebase?


10

Sto per iniziare a sviluppare un'applicazione web a pagina singola che è molto semplificata da un sistema di documentazione multiutente. Il front-end probabilmente utilizzerà Angular2.

Il progetto ha una scadenza breve, quindi ho cercato "scorciatoie", ovvero utilizzando vari servizi già pronti invece di implementare tutto da zero.

Avrò bisogno di una sorta di backend per memorizzare i dati dell'applicazione. Mi sono guardato intorno e ho trovato Firebase, che sembra portare via parte del lavoro di creazione di un back-end e API separati per comunicare con il front-end.

Ma ciò significa anche che dovrei mettere la logica di business nel front-end, nell'app web Angular2, giusto?

Quindi, se un giorno in futuro mi piacerebbe realizzare un front-end per app mobile, dovrei duplicare il codice della logica aziendale?

Immagino che l'alternativa sarebbe quella di creare un back-end che contenga la logica aziendale e utilizzi Firebase per l'archiviazione dei dati, ma questo sembra un po 'strano (non potrei semplicemente usare un ORM o qualcosa direttamente nel mio back-end per ottenere lo stesso risultato senza molto più lavoro?)

In che modo le persone di solito strutturano questo tipo di app, se ad esempio vogliono utilizzare Firebase?


Con quale database / orm, ecc. Hai più familiarità? Questo è probabilmente ciò che ti porterà lì più velocemente.
Robert Harvey,

Per questo progetto probabilmente userò alcune tecnologie che non ho mai usato prima, quindi ci sarebbe qualche apprendimento in entrambi i modi ...
Magnus W

Ti serve solo l'archiviazione dei dati o stai cercando di utilizzare anche la funzionalità di push istantaneo? Se non lo vedi come una logica aziendale, ogni tecnologia front-end può semplicemente gestirla direttamente con il proprio codice di connessione. Non sono sicuro che un ORM lo farà.
JeffO

Risposte:


2

D: Ma ciò significa anche che dovrei mettere la logica di business nel front-end, nell'app web Angular2, giusto ?

Sì. Se non è supportato da un server, l'azienda dovrebbe essere implementata da qualche parte.

Dopo l'acquisizione di Google, Firebase si è evoluto fino a diventare una piattaforma per gli sviluppatori di app mobili che non potevano permettersi (o non hanno bisogno) di distribuire il proprio back-end. Mentre la maggior parte dei servizi sono piuttosto trasversali: archiviazione, accesso, analisi e servizio di messaggi, è vero che fornisce anche funzioni cloud (una sorta di lambda) che possono essere utilizzate per eseguire alcune regole specifiche dell'azienda. Tuttavia, per applicazioni aziendali o applicazioni di grandi dimensioni con un dominio complesso e una logica aziendale, questo tipo di supporto non è all'altezza.

Quindi, come puoi immaginare, Firebase non ci esonera dall'avere il back-end dedicato all'hosting e all'esecuzione di operazioni specifiche dell'azienda.

D: Quindi, se in futuro mi piacerebbe realizzare un front-end per app mobile, dovrei duplicare il codice della logica aziendale?

Non necessariamente. Se l'app Web è costruita su Angular, piattaforme incrociate come NativeScript potrebbero consentire di riutilizzare i componenti Web, le librerie, i programmi di utilità, i modelli, ecc. Non ho approfondito l'argomento, quindi non posso assicurarti la piena compatibilità. La chiave sta in TypeScript , sia Angular che NativeScript ci impone di programmare su TS.

La questione quindi è dove ospitare il Javascript per la sua distribuzione e versione . Una parola CDN .

D: Immagino che l'alternativa sarebbe quella di creare un back-end che contenga la logica aziendale e utilizzi Firebase per l'archiviazione dei dati, ma sembra un po 'strano (non potrei semplicemente usare un ORM o qualcosa direttamente nel mio back-end per ottenere lo stesso risultato senza molto più lavoro?)

Alcune considerazioni

Da un lato, l'hosting, l'implementazione, la gestione e la manutenzione di un database non è cosa da poco. Per non parlare della gestione della sicurezza, della scalabilità, della disponibilità, ecc. Quindi, avere un provider DB che si occupa di queste cose è interessante. In questi giorni non è un'idea folle avere il nostro database da qualche parte nel cloud. Naturalmente, non lo suggerirei se stessimo implementando il middleware e i back-end per una banca. Ma potrebbe avere senso per la sessione del cliente, i profili dell'utente, le preferenze e questo tipo di dati che di solito vivono sul lato client o dati che non ci interessano.

D'altra parte, avere il nostro back-end è utile per un semplice motivo, il disaccoppiamento .

Invece di associare i nostri clienti a tutti i tipi di servizi che non gestiamo e controlliamo, implementiamo un'applicazione lato server da cui ci occupiamo di queste cose in modo che i nostri clienti non debbano preoccuparsi di problemi come l'arresto o l'interruzione dei servizi i cambiamenti. Inoltre, guadagniamo sulla semplicità perché il nostro back-end si comporta come una facciata.

D: In che modo le persone di solito strutturano questo tipo di app, ad esempio se desiderano utilizzare Firebase?

Varia ampiamente da progetto a progetto. Ad esempio, utilizziamo Firebase + back-end.

  • Firebase DB per condividere dati tra dispositivi-account-sessioni . Anche come log delle modifiche, quando il nostro back-end è temporaneamente non disponibile, i client inviano le operazioni di scrittura al registro, che viene sincronizzato in seguito.

  • Firebase Cloud Messages ci fornisce notifiche e argomenti push upstream / downstream. Usiamo il servizio per lo scambio di messaggi pub / sub.

  • Analisi Firebase Principalmente per metriche.

  • Back-end per tutto ciò che è strettamente legato al business


1

Risposta breve: non utilizzare la logica aziendale.

Risposta lunga: descrivi un'applicazione che sembra abbastanza piccola da non avere una logica aziendale separata; valutare se si dispone davvero di tale logica commerciale in primo luogo; molta logica di business può essere ridotta dalla progettazione dei dati e un po 'dal livello di presentazione. Molti piccoli sistemi sono principalmente CRUD e non hanno una vera logica aziendale; molte volte ho visto due o tre strati di classi che sono solo oggetti passthrough che lasciano spazio per un futuro che non arriverà mai.

È possibile iniziare con un'API direttamente da Firebase e successivamente introdurre un livello aggiuntivo per la logica aziendale quando si riscontra una reale necessità, purché si progetta il contratto abbastanza bene da consentire al servizio di mantenere una firma stabile mentre l'implementazione dietro potrebbe cambiare.


Non posso dire come sono d'accordo con questo. Ho lavorato in questo settore per 20 anni e ho lavorato sulla mia parte di piccole applicazioni CRUD, ma c'è quasi sempre qualche logica aziendale. Anche se si tratta solo di convalide personalizzate o calcoli fiscali, c'è sempre qualcosa.
Jules

Sono d'accordo con il tuo commento. Non sto dicendo che non vi è alcuna logica aziendale; quello che sto dicendo è che non è abbastanza grande da meritare un livello separato. Direi se tali convalide o calcoli appartengono davvero a un livello aziendale e non a un livello dati o presentazione (in particolare le convalide personalizzate tendono a corrispondere alla mia definizione di logica dei dati), ma il punto non è quello di essere puristi su dove dovrebbero essere classificati, ma pragmatico su dove codificarlo.
Bruno Guardia,

0

vedi /programming/54994228/how-to-minimise-firebase-function-latency

Cloud Firestore è la principale e unica connessione tra front-end e backend. Naturalmente una parte della logica può essere all'interno del front-end, ma per motivi di sicurezza che in genere possono essere solo a beneficio dell'utente offline. Dovresti implementare la sicurezza sulle raccolte Cloud Firestore stesse, assicurandoti i ruoli o tutto ciò di cui hai bisogno.

Quindi, utilizzare le funzioni cloud chiamate da un trigger Cloud Firestore.

Non DOVREBBE mai chiamare una funzione cloud da un'applicazione front-end.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.