For developers/business owners looking for native solutions in Drupal for implementing an e-commerce website, there are two options to achieve their goal, Commerce and Ubercart. Ubercart is a long-time solution to e-commerce while Commerce is a new system created by some of the former members of Ubercart team. Each solution is a combination of contributed modules and each set has its advantages and disadvantages over the other.
Ubercart is an optimal solution for Drupal 6 using Drupal’s node-based structure with a lot of customization options and management options. Even though Ubercart is the way to go with Drupal 6, for Drupal 7 there are other choices i.e. Drupal Commerce. Both options are a suite of modules that work together to provide basic functionality. However, their core is the main difference between the two solutions. Ubercart keeps a lot of its functionality inside the core such as shipping mechanisms or payment methods. In Commerce however, all these mechanisms are delivered through contributed modules. The idea behind Drupal Commerce is similar to divide and conquer concept that lets the users add functionality to a core module based on their needs.
Other differences between Ubercart and Commerce is whole product data structure. In Ubercart, products are nodes which means entering a product Ubercart is just like creating a basic page with a few more fields and details about the product such as price, SKU (Stock Keeping Units) and stock availability. Meanwhile, product variations are treated as attributes that are assigned to a common product node. In Commerce however, an entity system is used to represent products. Here, distinct products are created as entities that contain information about the product as well as price of the product. Product SKU, price, retail price, wholesaler price, units, units quantity, etc. are all kept in the product entity. This entity is then referenced in a product display content type that displays the product as well as other features of the product such as images, tags, extra information, etc. This is a more abstracted approach to keep data structures.
In Commerce different variations can be handled by taxonomy terms and each unique product can contain as many variations as required. In this system, it is possible to create complex pricing changes, shipping/payment mechanisms and inventory control for every product variation.