Android + 快递 + Mongodb

Android + Express + Mongodb

伙计们

我在这里研究了很多帖子,虽然有些回复验证了我的问题,但仍有一些差距,因此发帖是为了对我的架构进行完整的端到端验证。

我想构建一个 MVP,并希望在实现这一目标的最快路径上获得一些意见,并验证我的技术选择。我可以处理 Javascript、express-node.js、mongo,在 android 编程和中级 java.

方面有初学者水平的经验

我想要一个 android 应用程序,它可以在使用 android 应用程序之前对用户进行身份验证,然后使用户能够管理客户及其元数据,管理与每个客户有关的一些文档,例如在 CRM 应用程序中,将文档发回给客户,并通过支付网关处理客户的付款,并通过短信向客户发送一些通知以执行某些操作 "a" "b" "c".

出于显而易见的原因,我考虑过转向基于云的解决方案而不是本地数据库。这是我正在考虑的技术堆栈。我需要验证这是有道理的并且我没有遗漏任何东西。

客户端编程

服务器

Express 框架 + node.js 服务器 passport.js 用于身份验证 支付网关:条纹

CDN

可能是 amazon cdn 来保存一些文档、模板,然后在 mongodb 中保存该数据的静态 url,并在我的 express 应用程序中使用 node-aws 模块

后端存储

noSQL:Moongose ORM + mongodb 模块:pugm 时刻

在 5-6 个月后的某个时候,我确实希望有一个离线选项。我知道这对 mongodb 来说很棘手,而 couchdb 等可能更好,因为它们有精简版选项。另一个选择是我使用 Google firebase。或者使用一些与 SQLlite 和 mongodb 不对称同步的东西(虽然我不喜欢混合使用 sql 和 nosql)。

同样,速度对我来说非常重要。

请分享您对我所做的技术选择的看法,我是否在正确的轨道上,以及我需要担心的事情。我再次准备好 MVP,很快就希望一些客户试用它,然后在 6-9 个月内推出 GA。

谢谢 肥皂水

我不能在 Android 方面发言,但对于后端是的。

我对后端的理解是你想要以下功能:

  1. 用户认证
  2. 通过Stripe
  3. 在线支付
  4. 数据持久化
  5. 数据同步

  1. 用户认证

您指定要使用 Passport,但您尚未指定策略。如果您要进行基本的本地身份验证 (username/password),那么您需要确保遵循最佳实践,例如对密码进行哈希处理。

  1. 通过Stripe
  2. 在线支付

Stripe 易于使用且上手速度快。在做出承诺之前,请确保它满足您的所有要求。

  1. 数据持久化

我强烈建议不要使用 NoSQL 数据库,例如 MongoDB。原因是 NoSQL 用于非关系数据。 SQL 数据库适用于您在上面描述的关系数据:

enable user to manage customers

这将是 1:N 或一对多关系;一个用户可以有很多客户。

将定义更多关系,例如一对一或多对多,这使得 SQL 成为明确的选择。如果您正在寻找速度,那么最好查看 PostgreSQL as a free option otherwise Amazon Aurora

  1. 数据同步

这是您需要花费大量时间的事情。您必须决定是要推出自己的解决方案还是使用现有的解决方案,例如 Realm Platform。推出自己的解决方案本身就很复杂。例如,如果用户 A 和用户 B 都可以访问相同的客户 同时编辑它们怎么办?移动应用程序将如何响应?还有许多其他情况可能会发生。


除上述之外:

  • 我不会让您的 Node.js/Express 应用程序成为传统的单体 application/REST API。获取每个功能并使其成为自己的 "app" 或 微服务 .
  • 请注意接受付款时可能必须遵守的任何地方、州、国家等法规。 Stripe 有自己的遵循,您很可能还有另一组需要遵循。
  • 考虑 Spring framework, specifically the Spring Boot 项目。

项目没有 "best" 技术堆栈。即使我们对您和项目有足够的了解来提出建议(我们不知道),我们中的 none 有一个 crystal 球来预测未来,以及现在似乎适合的技术以后可能会很不合适。

我可以提供的关于构建 MVP 的最佳建议是:选择可以让您尽可能 quickly/cheaply 验证风险最大的假设的技术堆栈。 事实上,您应该期望构建许多 MVP,如 the MVP is not a single product, but a process.

举几个例子:

  1. 对于大多数初创公司来说,最危险的假设是用户首先需要他们的产品。 quickest/cheapest 验证这一点的方法通常是避免构建任何东西(这可能需要几个月),而只是 与潜在客户交谈(这可能需要几个小时)!在这种情况下,"tech stack" 可能只是一张餐巾纸草图或在 Balsamiq 中创建的一些模型。如果用户似乎不感兴趣,您将不得不重新开始设计,但至少您只损失了几个小时而不是几个月。另一方面,如果当您向客户展示您的草图时客户开始垂涎三尺,那么您可以继续进行下一个 MVP。

  2. 您做的下一个 MVP 可能是产品的硬编码静态 HTML 原型。您的 "tech stack" 可能是使用 html5up for free HTML5 templates, Bootstrap for styling, and GitHub Pages 进行托管。也许当你在这个阶段向客户要钱时,他们会拒绝你。真可惜,但它只花费你几天的静态原型而不是几个月的编码。另一方面,也许这个阶段会有一些用户签支票,这是很好的验证!

  3. 之后,下一个 MVP 可能会在你的 HTML 后面添加一个动态后端。在这种情况下,您最好使用 Heroku or Backend as a Service (BaaS) such as Firebase 等平台即服务 (PaaS),这样您就不必花时间 deploying/managing 基础架构。使用他们提供的任何数据存储,不用担心缩放或花哨的功能。如果您 幸运 足以获得一些牵引力,并且扩展正在成为一个问题,那就是一个很好的问题!

  4. 此时,您将更加了解您的问题 space,并将能够决定关系数据库或 NoSQL 数据库是否适合您的数据模型, Node 是否是您的团队最了解的技术,PaaS 或 BaaS 是否仍能满足您的需求,或者您是否需要迁移到基础架构即服务 (IaaS),例如 AWS,等等。即使在这个阶段,您通常仍希望针对快速移动进行优化,因此您通常会选择 (a) 您的团队最了解的技术,以及 (b) 拥有一个构建了开源库的大型社区,您可以将其用于解决您的问题space.

要更详细地了解这些权衡,请查看 Hello, Startup.

的 "Picking a Tech Stack" 章节