473,402 Members | 2,055 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,402 software developers and data experts.

Gradual Application Conversion

Hello,
I work for a company that sells a product with a VFP frontend/MSSQL backend,
and we have become aware for many reasons the we need to switch over to
..net. The problem is that our application is huge, and a flatout conversion
would take several years, during which time our core product would change.
It appears our best approach would is a gradual conversion from VFP to .net.

Has anyone faced and solved this challenge before? Any ideas on what would
be more practical - to call VFP from .net or vice-versa? Any recommended
reading would also be greatly appreciated.

- Chris
Jul 21 '05 #1
3 1539
partitioning a conversion is difficult. So many factors depend on how well
the VFP application was written.

If your application was written to have a COM interface, you are off to a
good start. Otherwise, I would suggest that the first thing you do is
partition your application, entirely in VFP.

In other words, if your app isn't already based on front-end components that
call business components, where the business components are declared as
OLEPUBLIC, do it now. Write test cases against the COM interface to make
sure that you can fulfill 100% of the application functionality using the
COM interface. It honestly doesn't matter WHERE you draw that line through
your application, since all this code will end up in the dust bin...
however, the line must be drawn completely through the application. no
exceptions.

This is deliverable 1: a completely partitioned and automatically testable
COM interface structure that allows 100% of the functionality to be called
from a different front end than the one provided in VFP.

Then, deliverable 2, some months later, would be a completely new front end,
written in VB.NET or C#. It would call a set of objects that simply use COM
Interop to call into your VFP business objects. Those automatic test cases
will come in handy, because along the way, you will have had to make some
changes to the COM interface to make it easier for C# to call it (or to
support new business needs, as the application continues to develop new
features).

Now, you can offer two complete interfaces. The timeframe of developing
deliverable 2 should have MINIMAL front-end development on the VFP front
end. This is because you will have two branches in your source tree: one
for the VFP front end and the other for the .NET front end. You don't want
to make too many changes in both places.

After deliverable 2 is shipped and you have completed user acceptance
testing (e.g. your code base is fairly stable... exactly when this happens
depends on the SDLC and support procedures that your company uses), you can
embark on a vertical slicing of the application.

The front end work was a horizontal slice, across all functions. The next
step is to take natural groupings or clusters of functionality and replace
them in a vertical fashion: one feature group at a time. It isn't clear
what your app does, so I will refer to a retail system. You could pull off
the inventory counting and management components, and rewrite them, leaving
POS completely intact. Ship. Deliver. Stabilize.

Then pick off another vertical slice. All along the way, you may have to
add further COM interfaces where you cut apart older VFP components. Put in
automated tests as much as you can. Note: when you replace a VFP component
that has a set of test cases written against it, don't delete the test
cases. Make sure that the test cases can call your new component in exactly
the same way as they could call the COM components (minus the details of
Interop itself). I would even go so far as to create a COM wrapper for the
new .NET stuff so that your .NET interface uses COM to call the new .NET
components underneath. That way, you don't have to change the U/I code
right away. You can migrate that interface at your own pace.

After a while, this goes faster, because doing a single vertical slice will
require that you create some infrastructure code, code that you will add to
and refactor as you go. By the time you get to the last slice, you have
such a good data access layer, and you are so familiar with it, that it
should be a snap to kill off the last component.

As for which slice to pick first: pick a small but distinct one. (like the
data admin interface or something). Much of the expense of this layer will
be spent creating methods and techniques that you will re-use. During this
step, don't pick the hardest possible thing. You already have hard stuff on
your plate.

Then, after the first slice is stable, and you have your .NET GUI calling
both COM and .NET components, the second slice should be harder... much
harder. Something big and ripe and nasty. Something that needs the
rewriting. After you finish that one, your team will have all the practice
they need to pick off additional slices and push them out at a rapid pace.

Do this agile. Your requirements are fairly well understood (its your app,
after all). Depending on the size of the app, you may be able to knock the
whole conversion off in a remarkably short period of time (I'm talking
months, not years, assuming you use something like Scrum or XP).

Good Luck,
--- Nick Malik
fmr. Director of Development
Applications Architect

"Chris Brown" <cb******@store-trak.com> wrote in message
news:lWaOc.5352$NV3.3563@trndny01...
Hello,
I work for a company that sells a product with a VFP frontend/MSSQL backend, and we have become aware for many reasons the we need to switch over to
.net. The problem is that our application is huge, and a flatout conversion would take several years, during which time our core product would change.
It appears our best approach would is a gradual conversion from VFP to ..net.
Has anyone faced and solved this challenge before? Any ideas on what would be more practical - to call VFP from .net or vice-versa? Any recommended
reading would also be greatly appreciated.

- Chris

Jul 21 '05 #2
Thanks for your very well detailed answer! In the details of each point, a
chapter could be written.

On the plus side, we have a business object to handle each form in our
system, on the negative side, no COM - yet. We've been 99% frontend for
about 7 years, and switching over a lot of code recently. Looks like we're
in for a couple year battle.

Thanks again for your comments. I'll keep you posted...

- Chris

"Nick Malik" <ni*******@hotmail.nospam.com> wrote in message
news:iatOc.59023$eM2.49814@attbi_s51...
partitioning a conversion is difficult. So many factors depend on how well the VFP application was written.

If your application was written to have a COM interface, you are off to a
good start. Otherwise, I would suggest that the first thing you do is
partition your application, entirely in VFP.

In other words, if your app isn't already based on front-end components that call business components, where the business components are declared as
OLEPUBLIC, do it now. Write test cases against the COM interface to make
sure that you can fulfill 100% of the application functionality using the
COM interface. It honestly doesn't matter WHERE you draw that line through your application, since all this code will end up in the dust bin...
however, the line must be drawn completely through the application. no
exceptions.

This is deliverable 1: a completely partitioned and automatically testable
COM interface structure that allows 100% of the functionality to be called
from a different front end than the one provided in VFP.

Then, deliverable 2, some months later, would be a completely new front end, written in VB.NET or C#. It would call a set of objects that simply use COM Interop to call into your VFP business objects. Those automatic test cases will come in handy, because along the way, you will have had to make some
changes to the COM interface to make it easier for C# to call it (or to
support new business needs, as the application continues to develop new
features).

Now, you can offer two complete interfaces. The timeframe of developing
deliverable 2 should have MINIMAL front-end development on the VFP front
end. This is because you will have two branches in your source tree: one
for the VFP front end and the other for the .NET front end. You don't want to make too many changes in both places.

After deliverable 2 is shipped and you have completed user acceptance
testing (e.g. your code base is fairly stable... exactly when this happens
depends on the SDLC and support procedures that your company uses), you can embark on a vertical slicing of the application.

The front end work was a horizontal slice, across all functions. The next step is to take natural groupings or clusters of functionality and replace
them in a vertical fashion: one feature group at a time. It isn't clear
what your app does, so I will refer to a retail system. You could pull off the inventory counting and management components, and rewrite them, leaving POS completely intact. Ship. Deliver. Stabilize.

Then pick off another vertical slice. All along the way, you may have to
add further COM interfaces where you cut apart older VFP components. Put in automated tests as much as you can. Note: when you replace a VFP component that has a set of test cases written against it, don't delete the test
cases. Make sure that the test cases can call your new component in exactly the same way as they could call the COM components (minus the details of
Interop itself). I would even go so far as to create a COM wrapper for the new .NET stuff so that your .NET interface uses COM to call the new .NET
components underneath. That way, you don't have to change the U/I code
right away. You can migrate that interface at your own pace.

After a while, this goes faster, because doing a single vertical slice will require that you create some infrastructure code, code that you will add to and refactor as you go. By the time you get to the last slice, you have
such a good data access layer, and you are so familiar with it, that it
should be a snap to kill off the last component.

As for which slice to pick first: pick a small but distinct one. (like the data admin interface or something). Much of the expense of this layer will be spent creating methods and techniques that you will re-use. During this step, don't pick the hardest possible thing. You already have hard stuff on your plate.

Then, after the first slice is stable, and you have your .NET GUI calling
both COM and .NET components, the second slice should be harder... much
harder. Something big and ripe and nasty. Something that needs the
rewriting. After you finish that one, your team will have all the practice they need to pick off additional slices and push them out at a rapid pace.

Do this agile. Your requirements are fairly well understood (its your app, after all). Depending on the size of the app, you may be able to knock the whole conversion off in a remarkably short period of time (I'm talking
months, not years, assuming you use something like Scrum or XP).

Good Luck,
--- Nick Malik
fmr. Director of Development
Applications Architect

"Chris Brown" <cb******@store-trak.com> wrote in message
news:lWaOc.5352$NV3.3563@trndny01...
Hello,
I work for a company that sells a product with a VFP frontend/MSSQL

backend,
and we have become aware for many reasons the we need to switch over to
.net. The problem is that our application is huge, and a flatout

conversion
would take several years, during which time our core product would change. It appears our best approach would is a gradual conversion from VFP to

.net.

Has anyone faced and solved this challenge before? Any ideas on what

would
be more practical - to call VFP from .net or vice-versa? Any recommended reading would also be greatly appreciated.

- Chris


Jul 21 '05 #3
les
Hi Chris,

We're working on a tool to automate the process. The problem, of course, is that the success of source code conversion depends on the design of the original VFP code. In many cases, VFP code takes advantage of capabilities (macro expansion, weak typing, the VFP report writer and others) that are not found in .NET.

You can compile VFP components as DLLs, then let Visual Studio build wrappers around them so that they are callable from .NET, but the benefit from doing this is unclear. The reason for migration is not to get an improved platform or greater speed, but to use a technology supported by Microsoft.

I have a company based in Mexico that employs some of the top .NET people in the world. We specialize in migrating FoxPro applications to .NET. I think that using offshore resources to rewrite your FoxPro form classes, then redesigning the application to use inheritable forms, reduces the coding time to a bare minimum, and gives you a true .NET application.

Please give me a call at (650) 344-3969.

Thanks,

Les

************************************************** ********************
Sent via Fuzzy Software @ http://www.fuzzysoftware.com/
Comprehensive, categorised, searchable collection of links to ASP & ASP.NET resources...
Jul 21 '05 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
by: bala | last post by:
hi access gurus would appreciate if u can give me pointers regarding conversion of ms access 97 application to ms access 2000, like what are the problems to be expected and how to handle it. ...
0
by: NoSpamForMe | last post by:
I am currently a java programmer, with some knowledge of the C# language but very little knowledge about ASP.NET, and I am know wondering if someone can *translate* the java servlet code below to...
5
by: Nobody | last post by:
After moving the web server from windows2000 to Windows 2003, II6. I'll got this error when running asp code: Server Application Unavailable The web application you are attempting to access on...
4
by: Chris Brown | last post by:
Hello, I work for a company that sells a product with a VFP frontend/MSSQL backend, and we have become aware for many reasons the we need to switch over to ..net. The problem is that our...
38
by: Oldie | last post by:
I have built an MS Access Application under MS Office XP (but I also own MS Office 2000). I have split the application in the pure database tables and all the queries, forms, reports and macro's. ...
0
by: Shat T. Cat | last post by:
Hello, I have a program that I originally wrote in VB6 that breaks down plain-text Profit & Loss reports from my organization's Accounting system into separate files for each Cost Center (office...
4
by: =?Utf-8?B?VkIgSm9ubmll?= | last post by:
I am at my witless end here, please help! I have an ASP.Net aspx web page, hosted on Windows Server 2003, that receives a query string with the path to an autocad drawing file selected from a...
0
by: Samuel R. Neff | last post by:
We're migrating our .NET 1.1 web application to .NET 3.5 and during conversion we clicked "Convert to Web Application" on the web project. The results from this conversion were inconsistent. 1. ...
0
Dököll
by: Dököll | last post by:
Hey Gang! What do you make of this error: I am attempting to read an Access Table, while all seems well in the code, looks like it is asking me to format form fields, what are your...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.