为什么使用Oracle Application Express进行Web应用程序?
我相信我们正在转向甲骨文Apex未来的发展。 我已经阅读了关于维基百科上的Oracle Apex,它是专业和可靠的。 在我看来,超过亲可能,但也许我错了。 我知道Oracle Apex是DBA的一名编程知识,只需很less或没有编程知识就能像MS Access for none程序员那样快速地设置一个Web应用程序。
如果您拥有Oracle Apex工作经验,您是否可以分享您的想法? 从维基百科的条目来看,似乎并不需要知道任何编程语言,只是PL / SQL?
编辑:Oracle Apex是否可扩展? 它能处理像Facebook的大小的stream量吗?
编辑:在Oracle Apex 3.2上工作了近两年之后。 我可以放心地说,我讨厌它,我不明白为什么有人会想在浏览器上创buildWeb应用程序/页面,PL / SQL和没有办法做版本控制。
谢谢。
插口
请注意我的经验是APEX 2.x-3.0。
在12个月的时间里,我使用了Apex的一些内部应用程序,但最终将其转移到了ASP.NET。
一些Oracle福音传教士声称,它能够创build高度dynamic的内容,与ASP.NET / J2ee等更主stream的框架相媲美。 从技术上讲,这是事实,但从技术上说,你也可以用一个独木舟穿过大西洋。 如果你很想把自己投入到一个复杂度很高的APEX项目中,那么我build议你看看一个简单论坛的APEX样本。 将其与ASP.NET MVC讨论论坛示例或RoR实现进行比较。
话说回来:
好
-
使用基本的CRUD数据input生成一个令人尊敬的Web应用程序非常容易,简单的报告和填充数据。 如果你是一个负责将公司的Excel / Access数据库整合到中央数据库/ Web环境中的IT人员,那么你应该看看APEX,它非常适合这个任务。 如果你期望的范围增长到一定程度的复杂性,那么我会直接转向一个更加灵活的框架。
-
如果您是DBA / PLSQL专家,但对传统Web开发没有经验,那么您将很好地准备在Web应用程序中公开现有的业务逻辑,而不用用HTML / CSS / JavaScript来填充,如果您不想。
-
APEX支持论坛有大量的信息,并由APEX开发人员配备。
坏的
当应用程序移出CRUD数据input并需要更多dynamic和事件驱动的行为时,我对Apex的体验开始走下坡路。
-
基于Web的GUI不酷。 debugging是痛苦的。
-
版本控制? 谁需要版本控制?
-
当你不可避免地需要在框架的有限范围之外做任何事情时,你必须用PL / SQL来解决你的问题。 对数据库写业务逻辑是好的,但是从PL / SQL程序生成HTML在2007年感觉不太古怪。
-
鉴于大量鬼鬼祟祟的地方你可以隐藏页面和redirect逻辑,程序stream程既难以可视化,也不利于模块化,可分离和可重用的代码。 面向对象开发人员将不会留下深刻的印象。 APEX有可能具有良好结构的可维护应用程序,但比应该更难。 这是世界远离MVC。
-
在我使用的版本中,不可接受的框架错误数量。 我希望这个版本能够在最近的版本中有所改进,但是将IDE集成到APEX平台本身的范例导致了我一生中最黑暗,最灵魂的debugging 。 作为一个例子,我试图重现一个间歇性的错误,会导致用户丢失会话数据。 使用会话信息popup窗口,我偶尔会看到会话数据应该会改变。 我花了2天试图find我的代码中的错误,没有运气。 近乎神秘,我注意到纯粹的机会,我可以在debugging窗口中重现错误的会话数据, 但应用程序本身不会进入错误状态 。 当我意识到可能发生的事情时,我的心就沉没了。 Oracle后来证实,我在APEX中发现了一个错误,导致会话信息窗口间歇性地显示我之前会话的数据。 我花了2天的时间来debugging与会话debugging窗口会话相关的错误。 这是我build立的最后一个Apex应用程序。
-
PL / SQL不是,也不会是Web开发中的下一件大事。 在与APEX合作一段时间后,我意识到这不会让我成为一个更好的Web开发人员。 掌握APEX实际上是关于PL / SQL的。 如果您打算将自己的职业生涯集中在Oracle技术上,那么这很好,只要知道APEX与主streamWeb技术的方向是非常接近的,那么您可以从APEX移植到其他Web框架的便携式技能是最小的。
如果您正在考虑APEX提供简单的基于Web的数据录入和报告,那么值得一看。 如果你正在寻找一个替代.NET / JAVA / PHP的dynamic网页内容和丰富的用户界面交互,我build议你看别处。
我非常感兴趣地阅读这个页面。 我们的开发团队现在已经使用Apex大约2年了,我想总结一下我们的经验。
为了构build基本的CRUD应用程序,Apex确实非常出色。 其实我build议你自己试试看。 我们确实遇到了一些初步的小问题,但是这些在3.2版本中似乎已经被解决了。
好的
- 非常适合简单的应用。 如果您的应用程序的复杂性会增加,请考虑另一种解决scheme
- 内置的模板意味着你的应用程序看起来相当专业(虽然有些人会辩论这一点)。
- 一个良好的支持论坛和社区,有大量急切的人在手帮助你。
- 一些精湛的内置控件。 爱图表和报告(但见下文)。
不好
-
debugging器是糟糕的。 如果您使用过Visual Studio(甚至是Microsoft Access的古老版本),那么您会对debugging器产生畏惧。 没有断点,debugging消息在屏幕上显示出来,必须手动将debugging消息打印到屏幕上。 可怕。 很多很多小时的事业失去了支持。
-
一旦你的应用程序变得复杂或需要任何丰富的function,你必须诉诸于JavaScript和HTML / CSS的黑客,这使得debugging和支持更加复杂(虽然你可以使用像Firebug或Visual Studio的工具来协助这一点)。
-
我们遇到了无法解释的会话状态错误,并且样式表变得与应用程序“分离”而没有解释 – 来举出几个问题。
-
支持不熟悉的应用程序可能具有挑战性,因为如果没有一个好的debugging器就很难遵循页面逻辑stream程。 而且我不会购买“好的应用程序应该编码得更好”的股票回应。 因为在现实世界中,他们不是 – 特别是当你使用承包商时。
-
报告看起来不错,但不是很好,如果你不能打印或出口到PDF。 当然,你可以掏出一个报告服务器,最后我们使用另一个解决scheme。
总体
我会尽一切办法使用Apex简单的CRUD应用程序。 对于任何超过轻度复杂性的东西,可以使用.Net或Java。 我不会注意到Apex上的Wiki文章,因为它非常歪曲。 请注意,“难以debugging”(在我看来是最大的失败)已经从文章中抹去了。
还有一点要非常小心,那就是可以很快地将Access数据库直接转换为Apex。 是的,如果你访问数据库是非常,非常简单的工作。 任何适度复杂的东西,忘记它,就像我们发现的那样。
我们绝对不会将它用于面向networking的应用程序,只能在内部使用。 在.Net中,你想要理所当然会遇到太多困难。 我知道有那里的网站,如AskTom,但这些并不完全复杂。 我们会看到下面的Facebook吗? 我认为不是 – 虽然我确信有人读这篇文章会有一些破解。
Apex在之前的评论中被总结出来 – pipe理者看到了这些演示,很快就买进来了,相信他们已经find了能够大幅缩短开发时间的银弹。 我有经理打电话给我说,我们需要一个数据库应用程序,在Apex的一个星期内build立40张桌子 – 这就是神话所造成的。 现实情况有所不同。 是的,有些事情会更快,更快,但是在其他方面你会失去时间 – debugging,支持和定制。
当然,你最好自己决定。 安装它,给它一个去,你可能会喜欢它。 但是,不要被快速的开发时间索赔所迷惑,直到你在一个现实的应用程序中给它一个很好的结果。
我参与了一个巨大的项目,将5000个模块Oracle Forms应用程序迁移到APEX。 这是APEX的一个极端的使用,但它工作得很好。 APEX仅适用于由DBA,实习生或最终用户构build的小型内部应用程序是一个完全的神话:它当然也适用于那些(并且比其他大多数工具更适合),但也可以用来构build非常复杂应用。
要构build一个复杂的应用程序(而不是一个默认的开箱即用的APEX应用程序),您将需要具有Javascript技能的团队中的某人以及具有CSS技能的人员。 但是大多数开发人员最初只需要PL / SQL。
它是可扩展的吗? 是的:可能比大多数其他解决scheme更具可扩展性! APEX为数据库服务器增加了很less的开销,只需要最小的应用程序服务器。 “Facebook的大小”? 我不知道为什么,但是我不明白为什么不这样做,假设你的机器上有一个Oracle数据库,它的大小和function足以处理“Facebook大小”数据和事务量。 像任何Oracle项目一样,可扩展性主要是由不良的数据库devise和写得不好的SQL所阻碍的,而不是由工具来实现的。 然而,并不是很多人发现自己构build“Facebook大小”系统:是吗?
APEX是一个使用数据库和PL / SQL来生成网页的框架。 如果你能弄清楚浏览器的输出需要什么,你可以在APEX中创build它。 如果您发现框架的任何部分都是禁止的,您可以编写PL / SQL过程并直接将它们公开给Web服务器,但仍然利用APEX系统为您pipe理的安全性,日志logging,会话状态等。
你应该知道PL / SQL,SQL,HTML,JavaScript和CSS。 确保界面看起来像一个大数据input应用程序,但是你input的数据大多是这些语言的代码片段。
它的规模和数据库一样。 它通常使用Apache作为Web服务器,但仅用于提供静态文件并将请求传递回数据库,其中网页由APEX模式中的PL / SQL代码创build。 您可以使用AJAX来最大限度地减less在pipe道上行进的stream量的大小。 您可以为特定项目,列表,页面区域,页面等设置caching。
由于大部分事情对于框架来说都很简单,所以在框架中自然会有一些更复杂的事情。 上面给出的颜色编码的例子可能是你用CSS做的事情,或者你可能需要转到打印语句来产生你需要的输出。 要学习框架如何让生活更简单,然后当你达到极限时,你可以轻易地采取更直接的方法。
来自VB.Net你会错过一步一步的debugging和拖放。 您不会错过页面生命周期的某个部分将执行绑定并重置您绑定到页面的另一部分中的对象的值的事实。
祝你好运。
格雷格
我是一名DBA,从来不需要用APEX或最近的其他东西(除了一些bash脚本和用于pipe理的自定义SQL脚本)进行编程,因为我的工作距离开发应用程序很远(除非是开发人员的痛苦) 。 当然,我的背景是开发人员,但我确实相信APEX是严格基于Oracle的数据中心计划的未来。
现在这里的关键字是以数据为中心的,因为我不同意其他许多DBA的观点,即所有的应用程序都是以数据为中心的(你知道哪种数据库pipe理员仍然认为ODBC代表ORACLE数据库连接)。 当然,所有的应用程序都涉及到数据,但都是以数据为中心 我怀疑,正如我怀疑APEX会被用于image processing或手机游戏类应用程序。 然而,尽pipeRIA和Web 2.0的所有炒作事实是,我们身边的大多数企业都渴望这些旧的数据为中心的应用程序和甲骨文是最好的数据库,我可以向你保证甲骨文和APEX可以处理远远超过Facebook的可扩展性当然,你已经把底层基础设施中的Facebook人放在了同样数量的钱上。
顺便说一句,我也讨厌甲骨文的APEX主题devise(可怕的不专业的用户界面,只是想象它作为一个银行或航空公司的主要用户界面),有限的能力(虽然这似乎将改变),许多更多的问题PDF报告没有支付企业数据库许可证的商业智能出版商?),但最重要的市场营销的APEX作为Access或Excel的替代品,因为它给人留下不好的印象,我可以向你保证,我的朋友,我绝不会允许孩子触摸我的数据库:)
你看,Oracle有一个叫做PL / SQL的gem,这些gem多年来一直用来处理数据比其他语言更直观。 现在,创业板正在枯萎,死亡forms/报告缓慢,我是积极的,没有新鲜的gradle生将永远不会学习严格的数据库存储过程(只看到Java和.Net开发者之间的激烈战争,你意识到,一旦你碰大括号{}任何东西都变成异端)。 唉,成千上万优秀的PL / SQL开发人员,APEX仍然是唯一可以保持生产力,开发优秀的以数据为中心的应用程序的圣地,没有APEX,PL / SQL肯定会成为下一个COBOL。 这就是为什么PL / SQL社区将推动Oracle将APEX转换为比我们目前看到的更强大的A级平台。 不pipe是这个,还是再见PL / SQL再加上大括号(顺便说一句,当你是开发人员的时候,至less尝试不同的技术是一个不错的主意,至less你知道为什么它不是必需的更环保另一边)。
我不知道你为什么不考虑PL / SQL的编程语言…
APEX非常适合您希望在数据之上使用轻量级UI的内部应用程序。 无需编写任何代码即可轻松构build。
我也发现APEX非常适合开发面向客户的小型应用程序。 我不想构build一个巨大的应用程序,将有数百名开发人员使用APEX进行工作。 但是,如果你有一个3或4个开发人员正在构build一个小型站点的情况,APEX可能会像Java / PHP / ASP.Net /假设同样熟练的开发人员一样好。 如果您的开发人员都拥有大量的ASP.Net专业知识,那么他们将有一个学习曲线来编写APEX应用程序。 不过,如果你有一堆PL / SQL开发人员尝试学习如何构buildASP.Net站点,你至less会遇到同样的难度。
Oracle的Metalink支持网站是用Apex编写的,所以它绝对可以扩展。 现在他们正在迁移到一个更新的基于Flash的支持网站。 我知道他们通过收购另一家公司来获得这个平台,而不是根据任何Apex的限制来构build它。
如果你想要任何networking应用程序的“超级性感”,你可能需要去Flash / Silverlight /空气。 在此基础之上,任何基于HTML的网站,包括一个Apex网站,都可以用Javascript进行打扮。 JQuery库将包含在Apex(4.0)的下一个主要版本中,尽pipe您现在可以包含该(或任何其他库)。
已经解决了维基百科文章中提到的caching问题,尽pipe大多数安装仍将图像和脚本放在传统的目录结构上,而不是从数据库中提供。
当你被locking到Oracle数据库时,我没有在文章中获得“平台”locking“con”。 Oracle可在Windows,Linux和AIX(以及其他)上使用。 这比ASP / SQL Server的locking要less得多。
Apex只适合于非程序员,DBA是一个不幸的误解。 我们已经使用它来构build几个业务线任务关键的面向客户的Web应用程序。
GUI由Apex页面模板(HTML),CSS和一些Javascript处理,以增强用户体验。 所有的业务逻辑都放在PL / SQL包中。 这对于使应用程序易于维护以及在其他Apex应用程序和其他客户端工具(如C#WinForms,Delphi,Java应用程序等)中重用业务逻辑至关重要。
就性能而言,Apex引擎几乎没有增加开销,应用程序的响应时间和可伸缩性在很大程度上取决于SQL查询(和数据模型)的质量。 用这种方式考虑一下:使用Apex,用户和数据库之间唯一的事情就是一层PL / SQL。 这只是常识,它必须比典型的.NET或Java应用程序更快,它在GUI和数据库之间有十七层的复杂性(通常包括大量的Web服务和对象关系映射层)。
不要把buisiness逻辑放入Apex。 只用于演示文稿。
如果您将代码放在应用程序中,您将无法维护它,并且您将从所有点击中获得RSI。 我总是创build一个包装层,在oracle世界中遵循Tom Kytes的build议 – 尽可能地将业务逻辑放在尽可能接近数据的地方。 这也意味着你的PL / SQL模块可以被其他系统调用 – 最重要的是 – 你的应用程序的真正内容将是直接的文本文件,可以用你最喜欢的文本编辑器/ IDE来操作。
- 创build一个视图,其中包含要为每个屏幕检索的所有数据。
- 为所有CRUD操作创build一个包装程序包。 (这是创build,阅读,更新和删除我假设)
简而言之:
不要把你的APP逻辑放在APEX里。
那是我的build议。 。 。 。
在我的项目中,我们使用Oracle APEX作为系统的内部视图。 它为此目的很好。
没有必要的编程。 PL/SQL
甚至SQL
都是可选的。 因此,我们的DBA和操作员可以根据自己的喜好来塑造视图。
不利的一面是,如果你需要一个没有编入系统的特性,那么添加它是非常困难的。 例如,我们想对输出进行颜色编码,而且还没有做到这一点。
我不想在APEX上build立一个面向客户的网站。
关于可伸缩性的问题,APEX的一个好处是它build立在Oracle之上。 专注于编写好的SQL并正确地devise表格,而且事情应该很好。 我会更关心让足够的用户进行扩展,成为问题。
享受非常多的阅读从上到下的线程,因为它感觉像一个热门的辩论。 为了提醒开始的线程开始:“我相信我们正在向Oracle Apex未来发展……”作为一名.NET程序员的杰克担心他的pipe理层的决定,并想到为Oracle Apexfind反面的事实最终最终以公开的方式清洗了所有网页框架中的脏麻布。 尽pipe受害者是Oracle Apex,但是如果辩论是在.net和j2ee之间的,那么.net或者j2ee也是一样。 我的观点是所有的框架都有自己的利弊。 这就是为什么我们有这么多。 这是浪费时间辩论什么是更重要的生活(性,食物或水?)当然,我们select最合适的项目时,需要。
- Oracle APEX套件适用于拥有大量Oracle数据库的环境,以及您真正拥有Pl / SQL爱好者的环境。 真的很容易构build丰富,复杂的Web 2.0 Data Centric应用程序(Apex 4.0),但是debugging和版本控制仍然是一团糟,您还必须坚持使用Oracle数据库(是的,您可以有解决方法,但不是健壮的)。
如果您希望在APEX中看到一个外部网站,我build议您查看Oracle Tools Users Group站点或Ask Tom 。 两者都是大型的,经常使用的网站有很多的定制。
您的维基百科文章中的印象是正确的。 您需要的唯一编程知识是PL / SQL。 如果你的网站大部分都是简单的报表,你甚至不需要编写SQL查询,向导界面将为你build立查询和输出。 如果你想要酷客户端的工作,你将需要知道CSS和Javascript。 PL / SQL仅用于更复杂的数据validation。
我不同意。 它不仅适合开发一些开发技能或DBA。
实际上,我们使用我们自己的CSS模板,大量的dynamic操作和交互(使用jQuery和几个框架),微调的安全性,我们自己的apex插件和复杂的PL / SQL过程来生成高度定制的应用程序。
当然,我正在使用apex> 4.0。
所以,如果需要,您可以构build复杂的应用程序(我们有多达100个不同的stream程/validation和每个页面的dynamic操作)。 而且它可能需要强大的编程技巧才能在JavaScript和PL / SQL(OOP)或Java存储过程中正确编码,并具有良好的SQL知识,可以使用recursionSQL和一些有趣的function来定义最多500行代码的优化查询。