在我对 Drupal、Wordpress 和 Salesforce 等较新的 Web 平台/应用程序的分析中,其中许多平台/应用程序都是基于模块化概念创建的软件:开发人员可以创建新的扩展和应用程序,而无需更改主要开发人员维护的“核心”系统中的代码。特别是,我知道 Drupal 使用“钩子”系统,但我对实现它的引擎或设计了解不多。

如果您要走上创建应用程序的道路,并且想要一个允许模块化的系统,那么您从哪里开始?这是一个特定的 设计模式 大家都知道吗?有没有 手册 这种范式倾向于订阅什么?他们有任何 网站 从头开始讨论这种类型的开发?

我知道有些人直接指向 OOP,但这似乎完全不是一回事。

我正在计划的这个特定系统更倾向于 Salesforce 之类的系统,但它不是 CRM 系统。

为了提问,请 忽略购买与购买建立论点, ,因为这种考虑已经在进行中。现在,我正在研究构建方面。

有帮助吗?

解决方案

这里有两种方法,采用哪一种取决于您的软件的行为方式。

一种方法是 插入 路线, ,人们可以 安装新代码 进入应用程序修改相关方面。此路线要求您的应用程序是可安装的,而不仅仅是作为服务提供(否则您安装并检查第三方发送的代码,将是一场噩梦)。

另一种方法是提供 应用程序编程接口, , 哪个行 被相关方召集 并使应用程序将控制权转移到位于其他地方的代码(如 Facebook 应用程序),或使应用程序按照 API 命令启用开发人员的方式执行操作(如 Google 地图)。

尽管机制有所不同,并且实际实现它们的方式也有所不同,但无论如何,您都必须定义

  • 我会给用户什么自由?
  • 我将为程序员提供哪些定制应用程序的服务?

最重要的是:

  • 如何在我的代码中启用此功能,同时保持安全和稳健。这通常是通过对代码进行沙箱处理、验证输入并可能向用户提供有限的功能来完成的。

在这种情况下,挂钩是代码中的预定义位置,用于调用所有已注册插件的挂钩函数(如果定义),从而修改应用程序的标准行为。例如,如果您有一个渲染背景的函数,您可以

function renderBackground() {
    foreach (Plugin p in getRegisteredPlugins()) {
        if (p.rendersBackground) p.renderBackground();
    }
    //Standard background code if nothing got executed (or it still runs, 
    //according to needs)
}

在这种情况下,您有插件可以实现的“renderBackground”挂钩来更改背景。

通过 API 方式,用户应用程序将调用您的服务来渲染背景

//other code
Background b = Salesforce2.AjaxRequest('getBackground',RGB(255,10,0));
//the app now has the result of calling you

这也都与 好莱坞原则, ,这是一个很好的应用,但有时并不实用。

其他提示

来自插件模式。 stackoverflow.com/amzn/click/com/0321127420“rel =”nofollow noreferrer“> EA的EA,可能就是你所追求的。为您的服务创建一个公共接口,插件(模块)可以在运行时将其集成到ad-hoc。

这称为组件架构。这确实是一个相当大的区域,但这里的一些关键重要的事情是:

  • 组件的组成(容器组件可以包含任何其他组件)
    • 例如,网格应该能够包含其他网格或任何其他组件
  • 通过接口编程(组件通过已知接口进行交互)
    • 例如,一个视图系统可能会要求组件渲染自身(比如在 HTML 中,或者可能会传递一个渲染区域并要求视图直接绘制到其中)
  • 广泛使用动态注册表(加载插件时,它会在适当的注册表中注册自己)
  • 用于将事件传递给组件的系统(例如鼠标单击、光标输入等)
  • 通知
  • 用户管理

还有更多!

如果您正在托管应用程序,请发布(和dogfood)RESTful API。

如果您要分发软件,请查看 OSGi

这是一个小视频,至少会给你一些提示; 乐高流程 [不到2分钟]

还有一个关于如何基于模块化创建自己的框架的完整方法......

制作模块化软件最重要的关键因素是要记住,纯粹[主要]是你可以创建系统的松散耦合问题。耦合越松散,模块化就越容易......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top