Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 771693
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 14, 20262026-05-14T18:41:37+00:00 2026-05-14T18:41:37+00:00

My team is maintaining a huge Client Server win32 Delphi application. It is a

  • 0

My team is maintaining a huge Client Server win32 Delphi application. It is a client/server application (Thick client) that uses DevArt (SDAC) components to connect to SQL Server.

The business logic is often “trapped” in Component’s event handlers, anyway with some degree of refactoring it is doable to move the business logic in common units (a big part of this work has already been done during refactoring… Maintaing legacy applications someone else wrote is very frustrating, but this is a very common job).

Now there is the request of a web interface, I have several options of course, in this question i want to focus on the VCL for the web (intraweb) option.

The idea is to use the common code (the same pas files) for both the client/server application and the web application. I heard of many people that moved legacy apps from delphi to intraweb, but here I am trying to keep the Thick client too.

The idea is to use common code, may be with some compiler directives to write specific code:

{$IFDEF CLIENTSERVER}
  {here goes the thick client specific code}
{$ELSE}
  {here goes the Intraweb specific code}
{$ENDIF}

Then another problem is the “migration plan”, let’s say I have 300 features and on the first release I will have only 50 of them available in the web application. How to keep track of it? I was thinking of (ab)using Delphi interfaces to handle this. For example for the User Authentication I could move all the related code in a procedure and declare an interface like:

type
  IUserAuthentication= interface['{0D57624C-CDDE-458B-A36C-436AE465B477}']
    procedure UserAuthentication;
  end;

In this way as I implement the IUserAuthentication interface in both the applications (Thick Client and Intraweb) I know that That feature has been “ported” to the web. Anyway I don’t know if this approach makes sense. I made a prototype to simulate the whole process. It works for a “Hello world” application, but I wonder if it makes sense on a large application or this Interface idea is only counter-productive and can backfire.

My question is: does this approach make sense? (the Interface idea is just an extra idea, it is not so important as the common code part described above) Is it a viable option?

I understand it depends a lot of the kind of application, anyway to be generic my one is in the CRM/Accounting domain, and the number of concurrent users on a single installation is typically less than 20 with peaks of 50.

EXTRA COMMENT (UPDATE): I ask this question because since I don’t have a n-tier application I see Intraweb as the unique option for having a web application that has common code with the thick client. Developing webservices from the Delphi code makes no sense in my specific case, so the alternative I have is to write the web interface using ASP.NET (duplicating the business logic), but in this case I cannot take advantage of the common code in an easy way. Yes I could use dlls maybe, but my code is not suitable for that.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-14T18:41:38+00:00Added an answer on May 14, 2026 at 6:41 pm

    The most important thing that you have to remember is this:

    • Your thick client .EXE process is used by one person at a time (multiple persons will have multiple instances of that .EXE).
    • Your intraweb .EXE process will be used by many persons at a time. They all share the same instance of the process.

    That means your business logic must not only be refactored out into common units, the instances of the business logic must be able to reside into memory multiple times, and not interfere.

    This starts with the business logic that talks to the database: you must be able to have multiple database connections at the same time (in practice a pool of database connections work best).

    In my experience, when you can refactor your business logic into datamodules, you have a good starting point to support both an Intraweb and a thick client version of your app.

    You should not forget the user interface:

    • Thick clients support modal forms, and have a much richer UI
    • Web browsers support only message dialogs (and then: those are very limited), all fancy UI stuff costs a lot of development time (though for instance, TMS has some nice components for Intraweb)

    Then, to top it off, you have to cope with the stateless nature of the HTTP protocol. To overcome this, you need sessions. Intraweb will take care of most of the session part.
    But you need to ask yourself questions like these:

    • what should happen if a user is idle for XX minutes?
    • how much session state can I store in memory? and what if it doesn’t fit?
    • what do I do with the session state that does not fit into memory?

    This is just a start, so let use know when you need more info.
    If it gets very specific to your app, you can always contact me directly: just google me.

    –jeroen

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Team, I have an ASP.NET MVC application that I'm deploying. When I deploy it
Team Foundation Server 2008 allows that every check-in is associated with a work item,
My team's about to begin development on an application with a Swing client and
I'm on a team maintaining a .Net web app with a SQL Server 2005
Say you're on a team that's maintaining a lot of internal python libraries(eggs), and
A programmer on your team is great at maintaining the old legacy system. But
My team and I are currently developing an application for both Android and iOS
I am part of a team that releases versions of our software 4-5 times
Team, I have build a VB.Net windows application which does uploads data into database
Team: I am building a business rules engine that is contextually aware -- but

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.