Onde colocar a lógica de negócios se estiver usando o Firebase?


10

Estou prestes a começar a desenvolver um aplicativo Web de página única que é muito simplificado, um sistema de documentação multiusuário. O front end provavelmente usará o Angular2.

O projeto tem um prazo curto, por isso tenho procurado "atalhos", ou seja, usando vários serviços prontos em vez de implementar tudo do zero.

Vou precisar de algum tipo de back-end para armazenar os dados do aplicativo. Eu olhei em volta e encontrei o Firebase, que parece tirar parte do trabalho de criar um back-end e uma API separados para se comunicar com o front-end.

Mas isso também significa que eu teria que colocar a lógica de negócios no front-end, no aplicativo da web Angular2, certo?

Então, se algum dia no futuro eu quiser criar um front end de aplicativo para dispositivos móveis, precisarei duplicar o código da lógica de negócios?

Eu acho que a alternativa seria criar um back-end que contenha a lógica de negócios e use o Firebase para armazenamento de dados, mas isso parece um pouco estranho (eu não poderia simplesmente usar um ORM ou algo diretamente no meu back-end para obter o mesmo resultado sem muito mais trabalho?)

Como as pessoas geralmente estruturam esses tipos de aplicativos, se desejam usar o Firebase, por exemplo?


Com qual banco de dados / organização, etc., você está mais familiarizado? Provavelmente é isso que o levará mais rápido.
22717 Robert Harvey

Para este projeto eu provavelmente estaria usando algumas tecnologias eu não tenha usado antes, então haveria algum aprendizado de qualquer forma ...
Magnus W

Você só precisa de armazenamento de dados ou também está tentando utilizar o recurso de envio instantâneo? Se você não vê isso como lógica comercial, cada tecnologia front-end pode lidar com isso diretamente com seu próprio código de conexão. Não tenho certeza se um ORM fará isso.
JeffO 16/03/19

Respostas:


2

P: Mas isso também significa que eu teria que colocar a lógica de negócios no front-end, no aplicativo da web Angular2, certo ?

Sim. Se não for suportado por um servidor, o negócio deve ser implementado em algum lugar.

Após a aquisição do Google, o Firebase evoluiu para se tornar uma plataforma para desenvolvedores de aplicativos móveis que não podiam pagar (ou não precisam) implantar seu próprio back-end. Embora a maioria dos serviços seja bastante transversal: serviço de armazenamento, login, análise e mensagens, é verdade que ele também fornece funções em nuvem (tipo lambdas) que podem ser usadas para executar algumas regras específicas de negócios. No entanto, para aplicativos corporativos ou aplicativos grandes com um domínio complexo e lógica de negócios, esse tipo de suporte é insuficiente.

Portanto, como você pode imaginar, o Firebase não nos exime de ter um back-end dedicado para hospedar e executar operações específicas de negócios.

P: Então, se algum dia no futuro eu gostaria de criar um front-end de aplicativo para dispositivos móveis, teria que duplicar o código da lógica de negócios?

Não necessariamente. Se o aplicativo da Web for desenvolvido no Angular, plataformas cruzadas como o NativeScript podem permitir que você reutilize os componentes da Web, bibliotecas, utilitários, modelos etc. Eu não me aprofundei no assunto, por isso não posso garantir sua total compatibilidade. A chave está no TypeScript , tanto Angular quanto NativeScript, exige que codifiquemos no TS.

A questão então é onde hospedar o Javascript para sua distribuição e versão . Uma palavra CDN .

P: Acho que a alternativa seria criar um back-end que contenha a lógica de negócios e use o Firebase para armazenamento de dados, mas isso parece um pouco estranho (eu não poderia simplesmente usar um ORM ou algo diretamente no meu back-end para obter o mesmo resultado sem muito mais trabalho?)

Algumas considerações.

Por um lado, hospedar, implantar, gerenciar e manter um banco de dados não é pouca coisa. Sem mencionar o manuseio de segurança, escalabilidade, disponibilidade etc. Portanto, é interessante ter um provedor de banco de dados cuidando dessas coisas. Hoje em dia, não é uma loucura ter nosso banco de dados em algum lugar da nuvem. Obviamente, eu não sugeriria isso se estivéssemos implementando o middleware e os back-ends de um banco. Mas poderia fazer sentido para a sessão do cliente, os perfis do usuário, as preferências e esse tipo de dados que geralmente residem no lado do cliente ou nos quais não nos importamos.

Por outro lado, ter nosso back-end é útil por uma razão simples: dissociar .

Em vez de conectar nossos clientes a todos os tipos de serviços que não gerenciamos e controlamos, implantamos um aplicativo do lado do servidor de onde cuidamos dessas coisas, para que nossos clientes não precisem se preocupar com problemas como interrupção ou interrupção de serviços alterar. Além disso, ganhamos simplicidade porque nosso back-end atua como uma fachada.

P: Como as pessoas geralmente estruturam esses tipos de aplicativos, se desejam usar o Firebase, por exemplo?

Varia amplamente de projeto para projeto. Por exemplo, usamos o back-end do Firebase +.

  • DB do Firebase para compartilhar dados entre dispositivos, contas e sessões . Também como um log de alterações, quando nosso back-end está temporariamente indisponível, os clientes enviam as operações de gravação para o log, que é sincronizado posteriormente.

  • O Firebase Cloud Messages nos fornece notificações e tópicos push up / downstream. Utilizamos o serviço para troca de mensagens de pub / sub.

  • Análise do Firebase Principalmente para métricas.

  • Back-end para tudo estritamente relacionado ao negócio


1

Resposta curta: não use lógica de negócios.

Resposta longa: você descreve um aplicativo que parece pequeno o suficiente para não ter uma lógica comercial separada; avalie se você realmente tem essa lógica de negócios em primeiro lugar; muita lógica de negócios pode ser reduzida pelo design dos dados e um pouco pela camada de apresentação. Muitos sistemas pequenos são na sua maioria CRUD e não possuem lógica de negócios real; muitas vezes vi duas ou três camadas de classes que são apenas objetos de passagem deixando espaço para um futuro que nunca chegará.

Você pode começar com uma API diretamente do Firebase e, posteriormente, introduzir uma camada adicional para a lógica de negócios quando achar que há alguma necessidade real, desde que você crie seu contrato suficientemente bem para que o serviço mantenha uma assinatura estável enquanto o implementação por trás pode mudar.


Não posso dizer que concordo com isso. Eu trabalho neste setor há 20 anos e trabalhei na minha parte de pequenos aplicativos CRUD, mas quase sempre existe alguma lógica de negócios. Mesmo que sejam apenas validações personalizadas ou cálculos de impostos, sempre há algo.
Jules

Eu concordo com o seu comentário. Não estou dizendo que não há lógica de negócios; o que estou dizendo é que não é grande o suficiente para merecer uma camada separada. Eu argumentaria se essas validações ou cálculos realmente pertencem a uma camada de negócios e não a camada de dados ou apresentação (particularmente validações personalizadas tendem a corresponder à minha definição de lógica de dados), mas o ponto não é ser purista sobre onde deve ser classificado, mas pragmático sobre onde codificá-lo.
Bruno Guardia

0

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

O Cloud Firestore é a conexão principal e única entre front-end e back-end. É claro que alguma lógica pode estar dentro do front-end, mas por segurança que normalmente pode ser apenas para o benefício do usuário offline. Você deve implementar a segurança nas próprias coleções do Cloud Firestore, protegendo as funções ou o que for necessário.

Em seguida, use as funções de nuvem chamadas a partir de um gatilho do Cloud Firestore.

Você nunca deve chamar uma função de nuvem de um aplicativo front-end.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.