业务逻辑通常“陷入”组件的事件处理程序中,但通过一定程度的重构,可以将业务逻辑移动到公共单元中(在重构期间已完成此工作的大部分工作...维护其他人编写的遗留应用程序非常令人沮丧,但这是一项非常常见的工作)。
现在有一个web界面的请求,我当然有几个选项,在这个问题上我想集中讨论VCL for the web(intraweb)选项。
这个想法是使用相同的pas文件的公共代码来处理客户端/服务器应用程序和Web应用程序。我听说过许多人将遗留应用程序从Delphi移植到Intraweb,但在这里我也想保持厚客户端。
这个想法是使用公共代码,可能带有一些编译器指令来编写特定的代码:
{$IFDEF CLIENTSERVER}
{here goes the thick client specific code}
{$ELSE}
{here goes the Intraweb specific code}
{$ENDIF}
接下来的一个问题是“迁移计划”,假设我有300个功能,在第一次发布时,只会有其中50个在Web应用程序中可用。如何跟踪它们?我考虑(滥用)使用Delphi接口来处理这个问题。例如,对于用户认证,我可以将所有相关代码移到一个过程中,并声明一个接口,如下:
type
IUserAuthentication= interface['{0D57624C-CDDE-458B-A36C-436AE465B477}']
procedure UserAuthentication;
end;
通过在两个应用程序(厚客户端和Intraweb)中实现IUserAuthentication接口,我知道该功能已经“移植”到了Web。无论如何,我不知道这种方法是否有意义。我制作了一个原型来模拟整个过程。它适用于“Hello world”应用程序,但我想知道它在大型应用程序上是否有意义,或者这种接口思想只会产生反作用。
我的问题是:这种方法有意义吗?(接口思想只是额外的想法,与上述共同代码部分一样重要)它是一个可行的选项吗?
我理解它很大程度上取决于应用程序的类型,无论如何,为了通用性,我的应用程序位于CRM /会计领域,并且单个安装的并发用户数量通常少于20个,峰值为50个。
额外评论(更新):我提出这个问题是因为由于我没有n层应用程序,所以我将Intraweb视为具有与厚客户端相同代码的Web应用程序的唯一选择。从Delphi代码开发Web服务在我的特定情况下毫无意义,因此我唯一的选择是使用ASP.NET编写Web界面(复制业务逻辑),但在这种情况下,我无法轻松地利用共同代码。是的,我可以使用dlls,但我的代码不适合这样做。