Who should be reading this document?
This document is intended for partners who have signed-up with CitiXsys under the ‘Open Source License Program’. Partners willing to undertake source code modifications under license from CitiXsys to pursue customizations should be reading this document.
This document illustrates the complete object hierarchy of a business entity i.e. the Subsystem within the iVend Retail framework. The Subsystem is logically divided into two (2) parts:
User Interface (View) Object Hierarchy
The user interface representation of a business entity is composed of two (2) views sitting right at the bottom of the hierarchy:
AddEditView: This is a user control which provides CRUD capabilities to a business object such as a Country.
SearchView: This is another user control which allows search capabilities on the attributes of a business object. For example, Name of a Country
The description of each class is listed in the following table below in the descending order of the hierarchy:
Namespace | Class | Purpose |
System.Windows.Forms | UserControl | WinForms Control class that is used to create all other controls. |
DevXpress.XtraEditors | XtraUserControl | Rich Editor class from DevXpress that specialises the UserControlClass |
CXS.Platform.UIComponents | CXSBaseView | Provides iVend Retail specific base methods of controlling the view of a business entity |
CXS.Retail.UIComponents | BaseRetailView | Provides implementation of properties that can be browsed in the designer files of the user control |
CXS.Retail.UIComponents | BaseAddEditView | Provides implementation of important events and their handlers |
CXS.Retail.UIComponents | BaseSearchView | Provides implementation of important events and their handlers |
CXS.Retail.UIComponents | CountryAddEditView | Actual implementation class for a specific business entity to provide CRUD capabilities |
CXS.Retail.UIComponents | CountrySearchView | Actual implementation class for a specific business entity to provide search capabilities |
CXS.Retail.UIComponents | RetailPOSViewManager | Class that loads, initialises and registers all the views for final rendering on the user interface |
Business Entity (Subsystem) Object Hierarchy
The code logic and the data part of each entity is denoted by two logical classes sitting right at the bottom of the hierarchy:
Business Object (e.g. Customer): This represents the attributes of a business entity including the getter-setter properties for the entity.
Business Object Subsystem (e.g. CustomerSubSystem): This class holds the data part of an entity (including access controlled based CRUD methods).
The description of each class is listed in the following table below in the descending order of the hierarchy:
Namespace | Class | Purpose |
System.ComponentModel | INotifyPropertyChanged | Notifies clients that a property value of a business entity attribute has changed. |
CXS.Framework.Core | BindableBase | Implements INotifyPropertyChanged interface and acts as the ultimate base class for notifying a change occurring in in the contents of the collection |
CXS.Framework.Core | UndoableBase | Handles most of the work for an n-level undo at an object instance level. It takes a snapshot of the business object fields before a user interacts with the application. The object is restored to its original state if a Cancel/Undo event is triggered by the user |
CXS.Framework.Core | BusinessObjectBase | Inherits from UndoableBase and implements IBusinessObject and ICloneable interfaces to provide object cloning at the base level |
CXS.Framework.Core | BusinessObject | This is a non-generic base class that inherits from BusinessObjectBase. All business objects are derived from this class. The basic state management functionality is implemented as virtual methods and properties of this class such is IsNew, IsValid, IsDirty and IsDeleted to flag the state of each object in the application instance. Object level validation rules and provision for specifying custom business rules for the derived classes are also implemented here. |
CXS.Framework.Core | IBusinessObjectSubSystem | Provides interface based inheritance constraints on the ‘BusinessObjectSubSystem’ concrete class |
CXS.Framework.Core | MasterBusinessObject | Derives from BusinessObject and provides the basic structure of any class that is instantiated within the application. Each derived object is uniquely identified by a unique identifier (Id) and a description of the object. While assigning an identifier basic authorisation and automatic n-level undo routines are automatically performed |
CXS.Framework.Core | BusinessObjectSubsystem<MBO> | This has the complete implementation of NHibernate connection and transaction management routines where MBO represents a BusinessObject type. It uses the BusinessObjectFactory class internally to instantiate and load smart objects i.e. objects with data that can be serialised across network or machine boundaries. The entire subsystem for iVend Retail is encapsulated by this class which implements the IBusinessObjectSubSystem interface |
CXS.SubSystem | Customer | Houses a collection of all base objects within the assembly that are representations of real time objects found in the retail domain. Some of the objects are country, state and zip code |
CXS.SubSystem | CustomerSubSystem | Has the domain code for each business object defined in the business objects segment and is prefixed with the ‘object.subsystem’ convention where the object is the name of the object such as country. Thus, a country object will have a subsystem class named as ‘Customer.SubSystem’. This is true for all other objects. These subsystem classes are responsible for populating the objects with the actual data from the database which is then serialised (and cached) as a ‘smart’ object in the framework |