Web界面编程环境取代旧的Delphi系统

Pro*_*ted 5 apache-flex delphi oracle silverlight

客户端旧的基于Delphi 5的系统,数千行代码,开始崩溃.新驱动程序和操作系统的问题是主要问题.

我们假设一个完整的重写,一次一个模块,并希望看一个基于浏览器的界面.数据库是Oracle 10,如果有意义,我们也可以替换它.

主要要求是:

  • 来自公司或用户社区,其足够强大,可以在未来5 - 7年内出现(我们就是现实主义者).

  • 能够快速连接以使用Oracle中的存储过程和ASP.NET和ColdFusion中生成的Web服务作为数据源.

  • 可部署在虚拟客户端以及胖客户端Windows和Apple计算机上.

  • 如果有一些方法可以重用旧的Delphi代码,那么额外的分数(但同样,我们是现实主义者所以我们不希望这会发生).

我们将Silverlight,Flex和Ruby视为可能的开发环境.有没有人对上述内容有任何其他建议或意见?

谢谢你的协助.

Jef*_*ser 6

做出选择涉及很多因素.我要问的第一件事是你知道什么?如果答案只是"维护遗留系统",那么就新知识而言,你实际上是从头开始.

首先,我想在你原来的问题中澄清我认为的误解:

我们正在关注Silverlight,Flex和Ruby

  • Silverlight是一种客户端技术,基本上是一个运行时.
  • Flex是用于为Adobe Flash Platform构建应用程序的SDK的名称.
  • Ruby是一种编程语言.

看起来您正在研究为不同目的而设计的多种极其不同的技术.他们不会很好地比较.

更直接的比较是将Silverlight与Flash Player与HTML/JavaScript进行比较.或者将Flex的MXML与.NET的XAML进行比较.据我所知,Ruby主要用于服务器端,通常使用HTML和JavaScript作为前端.如果您的前端解决方案需要与.NET和ColdFusion Web服务进行交互,我不确定为什么要将第三种服务器端技术投入到混合中.

也就是说,我将建议使用Flex/The Flash Payer作为前端技术,将ColdFusion作为服务器端技术.我推荐这个有一个原因,那是因为这是我所知道的.希望有更多熟悉.NET/Silverlight/Ruby的人可以了解每个人的好处.

我将逐一审视你的观点:

  Sourced by a company or user community that is robust enough to be
Run Code Online (Sandbox Code Playgroud)

接下来的5到7年(我们就是现实主义者).

我期望Silverlight,Flash平台和Ruby将在未来十年内活跃起来.

Flash平台,特别是Flex,拥有充满活力的社区.我相信Adobe所做的最好的事情之一就是围绕他们的平台和工具培养开发社区.

Flex仍然是新的并且在不断发展,但在过去的几年中它已经有了巨大的增长.尽管Adobe对开发人员的数量持严格态度,但我认为大多数估计都在250K-350K之间,这是3年前的两倍多.有播客,大量的博客,更多的框架,你可以动摇(RobotLEgs是目前最喜欢的),大量的会议(我最喜欢的是360 | Flex),以及许多开源项目.

ColdFusion已有10多年的历史,目前已进入第9版,拥有庞大的社区,拥有蓬勃发展的邮件列表(如House of Fusion和Adobe论坛),大量播客(如CFHourcfconvesations),博客,书籍,框架(如Fusebox,Model Glue和Mach-II), 开源项目会议.

有人说很难找到ColdFusion开发人员,这有时是正确的,因为与.NET相比,社区相对较小.上次我看到估计时,他们估计全球有750,000名开发人员.您可能与Flex开发人员有类似的问题.但听起来你已经有了一支你想要训练的球队,所以也许你不是在寻找新的雇员,这也不是问题.

全世界也有很多Adobe用户组.随意停下来和/或向集团经理询问他所选择的技术.我所知道的大多数组都是Flex或ColdFusion.

我要补充一点,ColdFusion和Flex/Flash平台都来自Adobe,Adobe已经花了很大力气确保它们能够很好地协同工作.我认为他们的整合是无与伦比的.

所有这些都说,.NET也有大公司支持它,而且比ColdFusion和/或Flex有更大的开发人员基础.我认为你在.NET世界中比在Flex或ColdFusion领域更有可能找到支持的商业解决方案; 但不能说出个人经验.

我不认为Ruby背后有一家公司,但我知道它有一个非常有活力的社区.您可以轻松地使用Ruby构建Flash Platform应用程序或Silverlight应用程序的后端.

  Able to quickly interface to use stored procedures from Oracle and web
Run Code Online (Sandbox Code Playgroud)

ASP.NET和ColdFusion中生成的服务作为数据源.

您提到了替换Oracle的可能性.我建议不要这样做.听起来你要做很多工作.如果您只需一次更改应用程序的单个"图层"即可完成,请执行此操作.

ColdFusion可以使用存储过程或直接查询快速轻松地访问Oracle中的数据.我毫不怀疑.NET可以做同样的事情.[我认为Ruby应该没有问题].

Silverlight和Flash Player(Flex)被设计为前端技术,我不建议尝试直接从它们访问数据库.我见过的大多数应用程序使用中间件层(例如ColdFusion或.NET)进行数据库访问,然后Flash将只访问该中间层.在模型视图控制器服务体系结构中,您可能经常将模型实现为数据库存储(Oracle),中间件中的服务(ColdFusion/.NET)以及前端技术中的视图(Flash Player/Flex或Silverlight或HTML)/AJAX).Flex/Flash应用程序中的控制器很可能是在Flash/Flex中创建的.我认为Silverlight很相似.

使用ColdFusion,您将使用cfstoredproc来访问存储过程,或者使用cfquery直接对数据库运行查询.您将这些查询放在服务中,然后从Flex/Flash Player使用RemoteObjects(我强烈建议使用的是AMF协议)或WebService(用于SOAP调用)或HTTPService(用于REST调用)访问该数据).AMF是一种二进制格式,可以在客户端和服务器之间实现更快的数据传输时间.IT还会自动将服务器端对象转换为客户端对象,反之亦然.这是一个非常好的触摸,并防止您必须编写自己的转换例程.

  Deployable on virtualized clients as well as thick client
Run Code Online (Sandbox Code Playgroud)

Windows和Apple机器.

我想我不确定虚拟客户端与胖客户端的含义.

Flash Player和AIR可轻松部署到Windows和Mac.如果对您来说这很重要,Adobe正在做很多工作来为移动设备的浪潮做准备.尽管去年有Adobe/Apple的论点,但Adobe仍然有机会部署到iOS设备.它处于早期阶段,但我期待在今年上半年看到一些重大更新.

Adobe因在Mac上的表现而受到批评,并且有各种原因.但是,事情在不断改进.

我知道Silverlight有Mac支持,但我不知道它的范围.我不希望在Windows Phone操作系统之外的移动设备上看到Silverlight.

就Ruby而言,您可能不希望以任何形式将Ruby部署到台式机.但是,您可以创建适用于您选择的浏览器的AJAX/HTML(和/或使用处理浏览器兼容性问题的AJAX框架).就目前情况而言,HTML/AJAX可能是移动设备部署的最佳选择,因为大多数移动浏览器都基于Webkit,因此HTML应用程序跨设备的运行方式通常具有高度一致性.这种方法很可能比在所述设备上使用Flash [或Silverlight]提供更好的性能.

  Extra points if there is some way to reuse the old Delphi code (but
Run Code Online (Sandbox Code Playgroud)

再一次,我们是现实主义者,所以我们不期待这种情况会发生.

我在这里帮不了你.您最好的选择是从头开始重新创建或尝试编写某种形式的转换/代码生成器工具.我不确定后者是否实用.如果您将Delphi代码转换为COM对象(如其他地方所建议的那样),可以在ColdFusion中使用它们,类似于如何在.NET中使用它们.

这有帮助吗?你还想知道什么?


Jus*_*ner 2

如果您正在寻找一个广泛支持的平台,该平台将存在相当长一段时间,并且可以轻松地与 Web 服务交互,我可能会选择使用 C# 的 ASP.NET。

.NET拥有庞大的开发者社区,可以轻松地与Oracle数据库交互,并且拥有强大的Web服务支持。

我可能会坚持使用 HTML 界面(而不是依赖 Flash 或 Silverlight,因为在 HTML5 最终确定后,这两种界面都不能保证广泛流行)。实际上,您现在就可以开始集成 HTML5 功能,因为大多数平台都支持其中的某些功能。

至于与旧的Delphi代码集成,您可以尝试将不同的模块变成COM组件。然后,您可以通过 COM Interop 在 .NET 代码中使用这些 COM 组件。

...看来我已经涵盖了所有基础。