我工作的公司有一个 ERP 软件,或者更好的是,一个家庭事故管理应用程序,用于维修公司,而这些公司反过来会处理保险公司的请求。
有很多维修公司使用我们的应用程序,该应用程序是从标准复制而来并针对他们的特定需求进行定制的。
这是更新和扩展它的噩梦!
我想知道优化这个的好方法:每个公司都有继承类的相同应用程序实例?接口适合这里吗?我们如何处理不同服务器中的集中式应用程序?我们不想只为所有人使用一台服务器。
我工作的公司有一个 ERP 软件,或者更好的是,一个家庭事故管理应用程序,用于维修公司,而这些公司反过来会处理保险公司的请求。
有很多维修公司使用我们的应用程序,该应用程序是从标准复制而来并针对他们的特定需求进行定制的。
这是更新和扩展它的噩梦!
我想知道优化这个的好方法:每个公司都有继承类的相同应用程序实例?接口适合这里吗?我们如何处理不同服务器中的集中式应用程序?我们不想只为所有人使用一台服务器。
我使用 Java、Spring 和 OO 来实现可配置性和可扩展性。应用程序通常具有带有属性的“配置”表,但对可配置性的需求通常超出了可以轻松配置的属性。
这确实是面向对象编程语言、对容器的完全控制和强大的框架(例如用于配置/依赖注入的 Spring 和用于 ORM 映射的 Hibernate)的领域。
您可以“尝试”在 PHP 中完成所有这些工作,但是拥有 20 多年所有语言的经验——并且没有任何不尊重的意思——对于一个严肃的产品,你可能需要考虑转向一个严肃的语言。
至于你实际需要做什么:
它的配置表和管理 UI。这些本质上是键值属性,您的应用程序将使用它们而不是需要可变性的常量。缓存这些对性能至关重要,因此在服务器级别控制 webapp 在这里很重要。
战略模式。诸如计算税款、创建发票或与外部系统接口等算法被实施为可插拔和可配置的策略。https://en.wikipedia.org/wiki/Strategy_pattern
XML Bean 配置/依赖注入。用于部署和算法配置。该层选择、创建和配置您的策略,使您能够根据客户要求选择和参数化适当的算法。这就是模块化的生命,让您可以在客户之间共享大部分代码库,但在此处插入必要的差异。在 Java 中,我们使用 Spring: http ://docs.spring.io/spring/docs/2.5.3/reference/beans.html
构建实际的软件产品,执行并可以针对不同的客户需求进行配置,是很困难的。它需要一个坚实的平台、真正的工具和适度的设计技能。
与可配置性和策略没有直接关系的单独问题是多租户应用程序(@Lee 提到的)。这就是应用程序在同一台服务器上同时运行具有不同设置的多个客户的地方。(我最近对这样的应用程序进行了主要的基础设施工作、架构和升级)。然而,这是一个不同的问题,仍然更复杂(但只是有点复杂),并且没有必要在本主题中解决。
我的经验是 Java 和 C#速度快且可靠,而 PHP速度慢,可靠性不高,而且往往会引发安全漏洞。我做了很多具有高级需求、系统集成和高性能特性的主要应用程序(工业、政府、金融、软件产品)——从紧凑型到中型到大型应用程序。因此,我非常精通如何交付多客户产品——以及哪些平台使我能够成功交付性能良好、可靠的应用程序。