Lo que hice en mi caso fue crear una nueva tabla en la base de datos, podría llamarla, Domains
por ejemplo.
Agregue todas las características específicas, aquellas que podrían mostrarse en algunos dominios pero no en el resto, como columnas para esa tabla como bit para valores booleanos. Como, en mi caso allow_multiple_bookings
, use_company_card
... lo que sea.
Luego, considere crear una clase Domain
y su repositorio respectivo, y solo pregunte estos valores en su código, tratando de insertar esa lógica lo más posible en su dominio (su modelo, servicios de aplicación, etc.).
Por ejemplo, no haría la verificación del método del controlador RequestBooking
si el dominio que solicita una reserva solo puede solicitar uno o más.
En cambio, lo hago para RequestBookingValidatorService
verificar si la fecha y hora de reserva ha pasado, el usuario tiene una tarjeta de crédito habilitada, ... o el dominio del que proviene esta acción puede solicitar más de una reserva (y luego si ya tiene ninguna).
Esto agrega la conveniencia de la legibilidad, ya que ha llevado esta decisión a los servicios de su aplicación. Además, encuentro que cada vez que necesito una nueva característica puedo usar migraciones de Laravel (o Symfony) para agregar esa característica en la tabla e incluso podría actualizar sus filas (sus dominios) con los valores que quiero en el mismo compromiso que codifiqué.