我的团队正在维护一个巨大的客户端服务器win32 Delphi应用程序。它是使用DevArt (SDAC)组件连接到SQL Server的客户端/服务器应用程序(胖客户端)。
业务逻辑通常“被困”在组件的事件处理程序中,无论如何,通过某种程度的重构,可以在公共单元中移动业务逻辑(这项工作的很大一部分已经在重构过程中完成了……维护别人编写的遗留应用程序非常令人沮丧,但这是一项非常常见的工作)。
现在有一个web界面的请求,我有几个选项,当然,在这个问题中,我想重点介绍web (intraweb)选项的VCL。
其思想是将公共代码(相同的pas文件)用于客户端/服务器应用程序和web应用程序。我听说许多人将遗留应用程序从delphi迁移到intraweb,但在这里我也试图保留胖客户端。
这个想法是使用通用代码,可以用一些编译器指令来编写特定的代码:
{$IFDEF CLIENTSERVER}
  {here goes the thick client specific code}
{$ELSE}
  {here goes the Intraweb specific code}
{$ENDIF}另一个问题是“迁移计划”,假设我有300个特性,在第一个版本中,web应用程序中只有50个特性可用。如何跟踪它?我正在考虑(Ab)使用Delphi接口来处理这个问题。例如,对于用户身份验证,我可以移动过程中的所有相关代码,并声明一个接口,如下所示:
type
  IUserAuthentication= interface['{0D57624C-CDDE-458B-A36C-436AE465B477}']
    procedure UserAuthentication;
  end;通过这种方式,当我在两个应用程序(胖客户端和Intraweb)中实现IUserAuthentication接口时,我知道该功能已经“移植”到了web上。无论如何,我不知道这种方法是否有意义。我做了一个原型来模拟整个过程。它适用于"Hello world“应用程序,但我想知道它在大型应用程序中是否有意义,或者这种接口思想只会适得其反,可能适得其反。
我的问题是:这种方法有意义吗?(接口的想法只是一个额外的想法,它不像上面描述的公共代码部分那么重要)它是一个可行的选择吗?
我知道这取决于很多应用程序的类型,不管怎样,我的应用程序是在CRM/Accounting域中的,单个安装上的并发用户数量通常不到20个,峰值为50个。
额外的评论(更新):我之所以问这个问题,是因为我没有n层应用程序,我认为Intraweb是拥有与胖客户端具有公共代码的web应用程序的唯一选择。从Delphi代码开发web服务在我的特定情况下没有任何意义,所以我的替代方案是使用ASP.NET编写web界面(复制业务逻辑),但在这种情况下,我不能以一种简单的方式利用公共代码。是的,也许我可以使用dll,但我的代码不适合这样做。
发布于 2010-05-12 05:13:27
我认为如果你把你的应用程序移到n层会是一个更好的解决方案,之后桌面和web应用程序会更容易使用。
通过将业务逻辑与演示文稿解耦,您已经完成了第一部分,您可以使用与RemObject捆绑在一起的Delphi或DataSnap。
在此之后,您将拥有可工作的桌面应用程序,您可以使用Intrawebm Asp.net或任何web部件,这样您就不必再次复制web部件的业务逻辑。
通常将桌面应用程序转换为web应用程序并不像你想象的那样容易,因为它们在不同的环境中工作,并且你需要按照它们的性质来构建每个应用程序。
https://stackoverflow.com/questions/2811748
复制相似问题