In your website, you will typically divide your principal model types (described above) into subtypes. For example, you will have:
Forms. Forms are models whose purpose is to collect data entered by web user. Forms are a subtype of
entities. You will typically store forms in APP_DIR/module/Application/src/Form
directory.
Filters. Filters are designed for transforming input data. Filters are a subtype of services.
You will typically store filters in APP_DIR/module/Application/src/Filter
directory.
Validators. Validators are used for checking input data for correctness. Validators are also a subtype of services.
You will typically store validators in APP_DIR/module/Application/src/Validator
directory.
View Helpers. They encapsulate some page rendering functionality. View helpers are similar to services.
You will typically store view helpers in APP_DIR/module/Application/src/View/Helper
directory.
Routes. Routes are a specific service model used for implementing custom mapping rules between URLs and your
controllers. You will typically store custom routes in APP_DIR/module/Application/src/Route
directory.
So, eventually you will have the following typical directory structure of your website's module:
/Application/src
/Controller
/Factory
/Plugin
/Factory
/Entity
/Filter
/Form
/Repository
/Route
/Service
/Factory
/Validator
/ValueObject
/View
/Helper
/Factory
It is possible to have arbitrarily many model subtypes. The more complex is your application, the more model subtypes you may have.