Regardless of the programming method you choose, you need a good strategy to make developing client/server applications quick and efficient. Because Visual FoxPro makes it easy to quickly prototype and build applications, you can choose to design and build a local prototype of your application and then upsize and implement it in stages against a remote data source. If you have access to a remote data source during the development process, you might choose to prototype your application against the remote data source, using remote views.
Building a Prototype with Views
The first step in developing a Visual FoxPro client/server application can be to build a prototype. By prototyping your application, perhaps module by module, you discover changes and enhancements to your application's design early in the development process. You can then fine-tune your design efficiently against small sample data stores before adding the additional layer of complexity inherent in working with large sets of remote, heterogeneous data. For more information, see Upsizing Visual FoxPro Databases.
Creating a Local Prototype with Local Views
A local prototype for a client/server application is a functioning Visual FoxPro application that uses local views to access local tables. You use views in your client/server prototype because the final client/server application will use remote views to access remote data. By prototyping your application with local views, you're one step closer to the final application.
Building a local prototype is especially practical if you don't have constant access to a remote data source during development, or if you don't want to use remote data to prototype your application. Local views access local Visual FoxPro tables, rather than remote data source tables. You create the local data, however, to mimic the structure of the data on the server. Using local data to represent remote data is one method of quickly developing and testing your application's basic design. You can also speed development by limiting the amount of data selected into the views. For more information, see Working with Views.
Planning for Upsizing
Upsizing is the process that creates a database on the remote server with the same table structure, data, and potentially many other attributes of the original Visual FoxPro database. With upsizing, you take an existing Visual FoxPro application and migrate it to a client/server application. For more information, see Upsizing Visual FoxPro Databases.
When you build an application that you'll eventually upsize, you make choices about the design of your application's architecture and the programming model based on eliciting maximum performance against a remote data source. For more information, see Client/Server Design for High Performance.
Prototyping with Remote Views
If you have access to a remote data source and you want to use remote data directly as you develop your client/server application, you can build your prototype using remote views. When you prototype using remote views, you skip the upsizing step because your data is already located on a remote server and you already have remote views to access that data.
Implementing your Client/Server Application
You can simplify testing and debugging your application by implementing your prototyped application in stages. When you implement a prototyped application in stages, you add multiuser enhancements, move the data to the remote data source, and test and debug the application, module by module, in a systematic manner.
As you implement your application, you can use native server syntax and access server-specific functionality, such as stored procedures on a remote server, with SQL pass-through technology. For more information, see Enhancing Applications Using SQL Pass-Through Technology.
Optimizing your Application
Once your application is fully implemented against remote data and you've completed the testing and debugging phase, you can fine-tune the speed and performance of the entire application. For more information, see Optimizing Client/Server Performance.