如果您想创建模块化应用程序,最好的资源是什么? [关闭]

2024-01-02

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

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

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

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

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


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

一种方法是plugin http://www.martinfowler.com/eaaCatalog/plugin.html route http://www.google.com/search?q=creating+an+API+plugin,人们可以安装新代码进入应用程序修改相关方面。此路线要求您的应用程序是可安装的,而不仅仅是作为服务提供(否则您安装并检查第三方发送的代码,将是一场噩梦)。

另一种方法是提供API http://www.google.com/search?q=creating+web+API, 哪个行被相关方召集并使应用程序将控制权转移到位于其他地方的代码(如 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

这也都与好莱坞原则 http://en.wikipedia.org/wiki/Hollywood_Principle,这是一个很好的应用,但有时并不实用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果您想创建模块化应用程序,最好的资源是什么? [关闭] 的相关文章

随机推荐

  • 如果你的基类有一个虚拟析构函数,你自己的析构函数自动是虚拟的

    我知道标题的说法是正确的 那么常规函数呢 例如 class Father virtual void foo class Son public Father void foo class GrandSon public Son void fo
  • 让 Karma、6to5ify 和 Istanbul 合作

    我有 Browserify 6to5ify 和 Karma 可以很好地发挥作用 成功运行我的规范 然而 当我添加代码覆盖率时 事情就变糟了 我尝试了几种方法 Add browserify istanbul转换为我的 karma conf j
  • 如果我想添加类型化属性,子类化 NSNotification 是正确的途径吗?

    我正在尝试子类化NSNotification Apple 的文档NSNotification陈述以下内容 NSNotification是一个没有实例变量的类簇 像这样 你必须子类化NSNotification并重写原始方法name obje
  • 无法选择 id=":1" 的 div

    对网络东西有点菜鸟 但我有一个带有此标签的 div div class 我已经测试过我的 jQuery 可以正常工作 当前使用版本 2 1 3 我已经测试了许多其他关于选择器中冒号的 SO 帖子中推荐的选择器 然后是其他一些 我已经分别尝试
  • ruby - 如何在 minitest 示例中使用标签

    I have require minitest spec require minitest autorun require minitest tags require rspec expectations describe One happ
  • 在一行中多次使用相同模式的正则表达式

    我正在寻找的模式是这样的 TXT txt 该模式可以在任何给定行中多次出现 我想要么提取模式的每个实例 要么使用 sed 或其他任何东西 删除每个实例周围的文本 Thanks 您可以将 Perl 用作 cat file foo TXT1 t
  • 如何在 Xcode 7 中使用对象库的堆栈视图

    我最近安装了Xcode 7 测试版并发现了一些东西new在对象库中 例如 水平堆栈视图和垂直堆栈视图 当我在其中放入一些控件时 stackview 似乎可以调整大小 根据控制尺寸 当我呈现更多控制堆栈时 似乎从堆栈视图开始自动调整 任何一个
  • 获取os.Error值的一种方法——字符串值(Go)

    如何获取字符串值os Error 也就是说 分配给一个变量 例如 package main import errors fmt func main err errors New an error message s err Error fm
  • Laravel: array_merge(): 参数 #2 不是数组错误

    异常开始出现在所有视图中 当我尝试运行时composer update 它总是以 error type ErrorException message array merge Argument 2 is not an array file l
  • ArrayList#size() 大于对象的实际数量

    我的 Android 应用程序中有一个 ArrayList 其中有 2 个项目 然而 它的 size 方法返回 3 我知道这听起来非常简单和愚蠢 但它是这样的 为什么会出现这种情况呢 ArrayList 的大小如何返回错误的数字 当我迭代列
  • 无需数据库即可存储数据?

    如果我想存储电子邮件 但没有数据库 例如 MySQL 我该怎么办 数据应该可以从 PHP 访问和写入 但常规 访问者 不得看到该数据 希望你能帮忙 您可以将它们放入文件中 data Defined somewhere file put co
  • 优先 Web SDK 与 REST API

    使用 Priority 的新工具开发网站时 在哪些情况下使用 Web SDK 访问 Priority 会比使用 REST API 更好 反之亦然又如何呢 这取决于您的需求 REST API 主要用于与其他应用程序集成 而 WEB SDK 用
  • 在 Mercurial 中指定点作为修订版

    我发现一些 Mercurial 命令的修订版被指定为点 例如 hg revert all r hg update C r hg pull r 这个点的含义是什么 它对应哪个版本 hg help revisions says 保留名称 指示工
  • 在 AngularJS 应用程序中预填充远程数据的最佳方法

    在我的 AngularJS 应用程序中 我需要从远程 REST 端点检索多个静态数据集合 这些数据集合将作为静态查找列表在整个应用程序生命周期中使用 我希望所有这些列表都在初始应用程序启动时填充 并保留并可供多个控制器使用 我不想动态加载任
  • 如何导出驻留在给定 Domino 服务器上的数据库列表?

    我有一台 Lotus Domino 服务器 上面有数量惊人的 Domino 数据库 排列在各个文件夹中 是否有某种方法可以以某种电子表格格式导出所有这些数据库及其标题和创建者姓名的列表 我拥有 Domino Admin 和 Domino D
  • 开发多个 Visual Studio 2010 扩展

    我正在单独的解决方案中开发几个独立的 Visual Studio 扩展 当我打开其中一个并在调试器中启动实验实例时 其他解决方案 未打开 的其他扩展也会被加载 必须有一种方法可以一次仅在实验实例中启动一个扩展 特别是您当前正在开发的扩展 对
  • Java中如何将字符串转换为函数?

    stackoverflow上有一个类似标题的问题here https stackoverflow com questions 41283897 how to convert string into math function just on
  • 如何在 Rust 中构建多工作区货物项目

    我有多工作空间 Cargo 项目 它有两个工作区 common and server common is a lib项目和服务器是bin项目 该项目在Github中的位置是here https github com rajcspsg mul
  • Spark 2.1.0中读取大文件时出现内存不足错误

    我想使用 Spark 将大型 51GB XML 文件 在外部 HDD 上 读取到数据帧中 使用Spark XML 插件 https github com databricks spark xml 进行简单的映射 过滤 重新排序 然后将其作为
  • 如果您想创建模块化应用程序,最好的资源是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在我对 Drupal Wordpress 和 Salesforce 等较新的 Web 平台 应用程序的