There are many Powerpoint bullet lists providing the characteristics of Disconnected Data in a Smart Client Application, but when the rubber is on the pavement and you're building the app, there are real world issues that you have to deal with. Each app is different, but here's my list from laying the groundwork this past week using ADO.NET DataSets and the IssueVision model.
- When the app loads, it has to be instant. A web service call cannot prevent the app from displaying instantly on the screen.
- An initial data synchronization has to occur (post app startup) and while connected, ongoing synchronizations must take place on a set frequency: 30 seconds, 1 minute, 5 minutes, etc. This brings up a challenging issue: How do we synchronize the client data with the server data (has to be with some timestamping, right?) and how do we handle, say, a client machine time that is different from the server?
- The Client App must be able to work disconnected. All data (sufficient to perform most operations) must reside on the client. The user must be able to update data while disconnected with a Send/Receive function. On Send/Receive AND in background synchronization process, all new and updated client data is synchronized with the server data and all data changes on the server are downloaded to the client.
- If the user closes the app with changes pending, those changes must be preserved for synchronization when the app is next used and in a connected state or when the user clicks Send/Receive.
- UI cues must be provided for all Send/Receive processes, to denote pending changes, and to display connected status. A Send/Receive button should be disabled when working online, for instance. Change pending icons should appear with any items not synchronized with the server, status bar text should accurately display the connected status of the application, etc.
- How do we handle data conflicts?