我有一个网站,其中有一个企业的多个应用程序。它们共享多种模型,但每种模型的功能之间都有明显的区别。例如,其中一个应用程序允许用户为客户报价产品。另一个应用程序是购物车。另一个是用于跟踪产品。他们为不同的受众做不同的事情,但他们都使用产品和用户模型等。
我的问题是,当使用像 codeigniter for php 或 RoR 这样的框架时,最好的架构决策是什么:
只构建一个包含所有功能的应用程序。
在一个“主应用程序”中构建多个应用程序并处理常用模型和库(我的选择)
谢谢!
我有一个网站,其中有一个企业的多个应用程序。它们共享多种模型,但每种模型的功能之间都有明显的区别。例如,其中一个应用程序允许用户为客户报价产品。另一个应用程序是购物车。另一个是用于跟踪产品。他们为不同的受众做不同的事情,但他们都使用产品和用户模型等。
我的问题是,当使用像 codeigniter for php 或 RoR 这样的框架时,最好的架构决策是什么:
只构建一个包含所有功能的应用程序。
在一个“主应用程序”中构建多个应用程序并处理常用模型和库(我的选择)
谢谢!
我们也在处理相同的场景。我们的解决方案是在 .NET 中,但技术不是需要担心的问题,至少在大多数情况下是这样。
我们常见的应用程序组件是:客户帐户管理、购物车和身份验证模型,在 3 个不同的客户端 Web 应用程序中共享。您可能需要研究几种方法来解决此问题。目标是在您的所有网站上共享通用组件。
我们选择的方法是让我们所有的应用程序共享相同的代码库。我们从所有三个应用程序中提取了客户帐户管理、购物车和身份验证模型,并首先创建了一个通用代码库。关键是要确保公共共享模型不知道使用它服务的应用程序。在某些情况下,我们使用特定于应用程序的注入,但主要的通用组件大部分只关心要编写哪个应用程序数据库,其他常见但对于每个应用程序不同的杂项设置。
缺点是每个应用程序都有自己的二进制文件,因此当在同一个 Web 服务器上运行时,加载到内存中的代码是每个应用程序加载相同公共模型的三倍。但这是我们预先知道的价格,因为现在内存非常便宜。
优点是我们有共同的关注点分离,如果在某些时候应用程序变得足够不同,它们可以演变成不同的动物。
另一种方法是将通用模型分离为 Web 服务。但是从部署的角度来看,这种方法有点脆弱。
我希望这有帮助!
对于 RoR,您应该考虑创建要在您的应用程序之间共享的 gem。这将允许您选择这些组件的哪种组合用于这些客户端。
您可以研究的另一件事是引擎,它就像应用程序中的应用程序 - http://guides.rubyonrails.org/engines.html - 此页面为您提供了如何使用它的示例。