拥有一个基础项目和多个类似子项目的最佳实践

Best Practice for Having a Base Project and Multiple Similar Sub-projects

我一直在为一个客户编写一个电子商店项目,现在我与另一个客户签订了一份新的类似合同。我想知道在开始第二个项目的同时继续第一个项目以使可重用性最大化的最佳做法是什么?

一种方法是将第一个项目更改为从数据库中读取所有菜单项、滑块图片...,这样我就可以将同一个项目交付给具有不同数据库的两个客户。这种方法的好处是我只需要管理一个项目,但它导致我逐渐编写CMS,这是一项耗时的工作。

另一个解决方案是使用 Git。例如,我会将基础项目分叉为两个不同的项目。如果我正在编写的功能是基础功能,那么我会将其推送到基础项目中;否则,我将其推送到适当的分叉项目中。

您认为哪种方法更好?或者你们有什么更好的主意?

干杯, 哈比卜

我不确定你想要什么,但如果你想开发一个包含钱包、跟踪、支付等许多功能的企业项目,我认为你可以将每个服务实现为一个微服务,整合所有这些。 关于git,我觉得只处理源代码比较好,最好用git模块处理微服务,只用分支开发流程

有几件事需要考虑。

  • 首先,你说的这个项目是有卖的能力的。因此,您必须考虑通过配置文件、挂钩和插件使其动态化的可能性有多大,从而通过它对项目的功能进行修改。我知道你已经考虑过了。
  • 其次,使用核心存储库和不同的分支进行定制。 (这是一个好主意,但需要适当的纪律、工作流程和人力来确保一切都经过微调并正常工作)
  • 强烈建议使您的应用程序成为云原生应用程序,并在生产环境中启动之前提供适当的 UAT/QAT 测试环境,并在 Git 和 CI/CD 管道,以防止合并过程中出现问题。

我终于找到了一些解决方案,想与大家分享。让我们将差异分为数据差异和代码差异两大类:

数据差异

如果每个项目中的数据库不同(例如,产品在一个项目中有一些特性,而在另一个项目中有一些其他特性),那么最好的解决方案是使用 NoSQL,例如 MongoDB。首先,NoSQL 被指定用于支持没有 well-defined 数据结构的数据库,并且您不知道现在或将来可能为每个实体添加什么功能。它完全适用于我的场景,每个商店可能具有不同的数据结构。但是,由于我的项目是基于 Laravel 并且它没有 built-in 对 MongoDB 的支持,所以我决定设计一些还不错的 key-value 表到目前为止。

代码差异

关于代码的差异,我肯定会建议 Git 中的分支和 Git 存储库提供的其他功能,例如 Gitlab 存储库镜像。每个功能在我的代码中都有不同的分支,我可以通过合并我要交付给客户的那些分支来为每个客户提供不同的功能。

总而言之,您可以将尽可能多的业务逻辑放入数据库中,因为将来更改它会更直接。另一方面,你最好在代码中保留主题,因为每个客户喜欢不同的主题,在代码中更改它们比将它们带到数据库更容易。