We are going to create a framework that can do anything we need it to. Of course, the exact needs of a project vary from project to project, so we will ensure it has some fundamental features, which we can then extend to whatever we need. The following features will be the minimum that we will have our framework capable of doing:
Displaying and managing products
Displaying and managing categories of products
Embedding products, listings, and categories into other aspects of a website or web application (after all, it is a framework we are creating!)
Customizing products such as apparel
Searching for products
Filtering the product list based on the customers' preferences, such as brand, or other properties
Providing wish lists, that is, lists of products that users wish to purchase at some point, or would like someone to purchase for them (including the provision to facilitate gift purchases)
Generating recommendations based on previous purchases
Sending e-mail notifications when certain products are in stock
Publishing ratings and reviews of products
Providing a shopping basket to store products and quantities of the products a customer wishes to purchase
Calculating shipping cost
Based on products and/or their weights
Based on delivery address
Based on custom rules (for example free shipping to orders over a fixed amount)
Tax cost calculations
Managing discount codes
Managing gift certificates
Processing payments
Allowing customers to manage their account
Allowing us and other administrators to manage the store
Along with these features, we are also going to look at the following functionalities:
Deploying the framework into a live store environment
Backing up and restoring the store
Enabling secure connections to the live store using SSL
To illustrate how our framework can be extended to meet the needs of any e-commerce situation, there are three appendices looking at different ways to extend the framework:
Web service integration, for services such as Google Product Search
Extending our store to support downloadable products
Various code snippets in a cook book format, showing how to quickly extend this (and any other framework) to support some specific enhancements