With regard to engine design, Entity Component Systems are currently very popular. They're not the only way to think about game engines & loops by any means, but many developers have found them to be a useful standard.
The principle of composition over inheritance they emphasize tends to be well-suited to game development for a few reasons:
Flexibility (Non-Brittleness): When the design changes at the 11th hour in response to playtest data, juggling a few components is often simpler than uprooting a whole inheritance hierarchy.
Code Cleanliness: (With appropriate discipline...) component classes tend to be smaller, simpler, and have narrower focus & responsibilities than the sprawling Player classes of older games. They're a better fit for the amount of code a human can hold in their mind at a time, making it a bit less easy to create unintended side effects and hard-to-track-down bugs.
Reuse & Remixing: Composition makes it easy to create new behaviours, by sticking together existing components like LEGO bricks. This is a huge help on larger teams where you have many non-coders who need to tune complex interactions - like a designer refining AI archetypes or an artist creating a new effects sequence. If they can chain together existing components to do it, it removes a dependency on programmer time, letting everyone get more done.
This is also significant for games with procedually generated or user-generated content - it creates a useful level of granularity for these systems to work on. Level editing tools
Performance: This isn't automatic, and it's certainly possible to code an ECS implementation with terrible performance. But if you make it a priority from the ground up, ECS can be made particularly amenable to multithreading and data locality for efficient cache usage, by encouraging smaller single-purpose update functions and standardized dependency patterns between components/systems (more on this in the links below).
These articles have been very influential to my thinking about ECS, particularly with regard to structuring for performance:
Component - Game Programming Patterns
Data Locality - Game Programming Patterns
Data Oriented Design - Game Developer Magazine September 2009 (p49 of PDF) and September 2010 (p33 of PDF)
These resources should give you some good ideas for ways you can create your own systems.