1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- ======================
- Oscar design decisions
- ======================
-
- The central aim of Oscar is to provide a solid core of an e-commerce project that can be
- extended and customised to suit the domain at hand. This is achieved in several ways:
-
- Core models are abstract
- ------------------------
-
- Online shops can vary wildly, selling everything from turnips to concert
- tickets. Trying to define a set of Django models capable for modeling all such
- scenarios is impossible - customisation is what matters.
-
- One way to model your domain is to have enormous models that have fields for
- every possible variation; however, this is unwieldy and ugly.
-
- Another is to use the Entity-Attribute-Value pattern to use add meta-data for each of
- your models. However this is again ugly and mixes meta-data and data in your database (it's
- an SQL anti-pattern).
-
- Oscar's approach to this problem is to have have minimal but abstract models
- where all the fields are meaningful within any e-commerce domain. Oscar then
- provides a mechanism for subclassing these models within your application so
- domain-specific fields can be added.
-
- Specifically, in many of Oscar's apps, there is an ``abstract_models.py`` module which
- defines these abstract classes. There is also an accompanying ``models.py`` which provides an
- empty but concrete implementation of each abstract model.
-
- Classes are loaded dynamically
- ------------------------------
-
- The complexity of scenarios doesn't stop with Django models; core parts of
- Oscar need to be as customisable as possible. Hence almost all classes
- (including views) are
- :doc:`dynamically loaded </topics/class_loading_explained>`,
- which results in a maintainable approach to customising behaviour.
-
- URLs and permissions for apps are handled by Application instances
- ------------------------------------------------------------------
-
- The :class:`oscar.core.application.Application` class handles mapping URLs
- to views and permissions at an per-app level. This makes Oscar's apps more
- modular, and makes it easy to customise this mapping as they can be overridden
- just like any other class in Oscar.
-
- Templates can be overridden
- ---------------------------
-
- This is a common technique relying on the fact that the template loader can be
- configured to look in your project first for templates, before it uses the defaults
- from Oscar.
|