OK from what I can see there are 3 ways to use classes within MODX-Revo, what are the differences and which is the way forward, by way forward I mean will one way be depreciated in future realeases.
way 1 (Standard PHP way)
<?php
require_once 'path/classname.class.php';
$instanceOfClass = new className($modx);
?>
Way 2 (copied from docs)
<?php
$x = $modx->getService('extendeduser','Sampleclass',$modx->getOption('core_path',null, MODX_CORE_PATH).'components/extendeduser/',$scriptProperties);
if (!($x instanceof Extendeduser)) {
$modx->log(modX::LOG_LEVEL_ERROR,'[Extendeduser] Could not load Extendeduser class.');
$modx->event->output(true);
?>
Way 3 (Also taken direct from docs)
<?php
$modx->loadClass('myBox','/my/path/to/model/');
?>