Un módulo es una unidad reusable y autónoma de nuestra aplicación. Por defecto nuestra aplicación tiene un solo módulo llamado Application. Y es normal colocar nuestros modelos, vistas y controladores en este módulo, especialmente en un sitio web simple.
Un módulo puede contener modelos, vistas, controladores y archivos estáticos. Las clases del módulo generalmente viven en un espacio de nombres separado (el mismo nombre del módulo). Un módulo tiene su propio archivo de configuración en donde podemos registrar rutas, controladores, complementos de controladores, servicios, vistas, etc.
Podemos necesitar crear un nuevo módulo cuando alguna de las siguientes es verdadera:
Si nuestro sitio web es relativamente grande y dividiéndolo en piezas resulta más fácil de mantener. Por ejemplo, podemos agregar el módulo Admin y colocar la funcionalidad de administración en este módulo.
Si la funcionalidad que estamos implementando es autónoma (no tiene o tiene pocas dependencias con otros módulos de nuestra aplicación). Por ejemplo, la funcionalidad de un Blog se puede en teoría separar en un módulo, porque esta no depende del resto de la aplicación pero la aplicación depende de él.
Si el módulo se puede separar de nuestra aplicación y simultáneamente usar en otro proyecto. Por ejemplo, el módulo del Blog se puede reusar en otro proyecto sin cambios (solo su configuración necesita cambios).
En cualquier caso, la vida real es compleja, y deberíamos guiarnos por la intuición cuando parece ser que es necesario crear un nuevo módulo. Si pensamos que separar una funcionalidad en un módulo nos dará beneficios significativos, creamos el módulo.
Al mismo tiempo, no deberíamos crear un enorme número de módulos casi vacíos. Es mejor combinar funcionalidades relacionadas en un solo módulo.