What is the correct way to organise and separate functions in a Controller into their own files? Here is my test.routing.yml:

test.alpha:
  path: '/test/alpha'
  defaults:
    _controller: Drupal\test\Controller\TestController::testAlpha
    _title: 'Alpha'
  requirements:
    _permission: 'access content'

test.bravo:
  path: '/test/bravo'
  defaults:
    _controller: Drupal\test\Controller\TestController::testBravo
    _title: 'Bravo'
  requirements:
    _permission: 'access content'

sitelog.charlie:
  path: '/test/charlie'
  defaults:
    _controller: Drupal\test\Controller\TestController::testCharlie
    _title: 'Charlie'
  requirements:
    _permission: 'access content'


Here is my Controller: TestController.php:

namespace Drupal\test\Controller;

class TestController {
  public function testAlpha() {
    return array(
      '#type' =&gt; 'markup',
      '#markup' =&gt; 'Hello, World!',
    );
  }
  public function testBravo() {
    return array(
      '#type' =&gt; 'markup',
      '#markup' =&gt; 'Hello, World!',
    );
  }
  public function testCharlie() {
    return array(
      '#type' =&gt; 'markup',
      '#markup' =&gt; 'Hello, World!',
    );
  }
}


My Controller file is set to grow. I will be adding many more functions, and adding hundreds of lines of code to all of those functions.

What is the correct way of organising and separating out those functions into their own files, in a Drupal 8 project?

In Drupal 7 we used .inc files to keep files from getting too large. Sometimes a common.inc would be used to group reusable functions.

What I like about React is that functionality is broken up into separate components, into separate files. I prefer lots of files, containing a small amount of code, organised into folders.

I'd like to bring this same approach into my Drupal 8 projects, but follow the correct PHP standards/Drupal best practice. My goal being to improve: the readability of my code, ease of finding my code, and possibly, the organisation of reusable code.
There are a few things that you can do.


As already suggested by Jaypan, you can have as many controllers as you like, grouped by whatever makes sense for you. You can also have a base classes/hierarchy and re-use code through that
You can define services and also static classes/methods to extract re-usable logic (or also not-reusable logic). I'd say that's the 1:1 replacement for functions in include files. Services are defined in a yourmodule.services.yml and you can use dependency injection to make each service self-contained with explicit dependencies to other systems, so that you can also write (unit) test for that code.
You can also use Traits, a relatively new PHP feature that basically allows you to put a few methods into a separate file and include it in one or several classes where you can use them internally as if they were defined on that class. Kind of like a base class except that you're not limited to a single trait, you can have as many as you want.