Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

409
Vistas
Symfony: ¿es una mala práctica agregar funciones personalizadas en una Entidad?

Entiendo que una Entidad es una clase básica que contiene datos.

Pero, ¿es una mala práctica si la Entidad tiene funciones personalizadas que manipulan los datos?

Personalmente, creo que este tipo de funciones deberían ir a un Service diferente. Pero en este caso, getNextPayroll es bastante útil:

 <?php class Payroll { /** * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var \DateTime * * @ORM\Column(name="last_payroll", type="datetime", nullable = true) */ private $lastPayroll; /** * Set lastPayroll * * @param \DateTime $lastPayroll * @return CompanyBase */ public function setLastPayroll($lastPayroll) { $this->lastPayroll = $lastPayroll; return $this; } /** * Get lastPayroll * * @return \DateTime */ public function getLastPayroll() { return $this->lastPayroll; } public function getNextPayroll() { $payrollNext = clone $this->getLastPayroll(); $payrollNext->add(new \DateInterval("P1M")); return $payrollNext; } }

La fecha de la próxima nómina no se almacena en la base de datos. Sólo la fecha de la última nómina. ¿Debo obtener la próxima fecha de nómina en un servicio diferente o está bien usar una función personalizada no generada por la doctrina en una entidad?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No es una mala práctica, si su código aún cumple con los principios SÓLIDOS (principalmente, el principio de responsabilidad única en ese caso)

Entonces, si el método no está relacionado con la lógica de la entidad (por ejemplo, enviar correos electrónicos o almacenar algo en la base de datos directamente desde su entidad), está mal. De lo contrario, está absolutamente bien.

El atributo principal de la lógica relacionada con la entidad: debe estar en la misma capa con otras cosas en la entidad.

En realidad, las entidades de Doctrine no son solo objetos de transferencia de datos (sin comportamiento). Los desarrolladores de Doctrine insisten en usar las entidades como Rich Models (mira el video de Marco Pivetta, uno de los desarrolladores de Doctrine y mira su bonita presentación )

over 4 years ago · Santiago Trujillo Denunciar

0

Por lo que sé, no debería ser una mala práctica siempre que su entidad no ingrese a la capa de la base de datos, de la que debería ocuparse el Repositorio.

Entonces, las cosas en las que más o menos solo recupera EntityData (como su método que devuelve solo datos modificados que pertenecen a la Entidad) deberían estar bien en la Entidad en sí. De esta manera, también puede usar fácilmente los métodos dentro de Twig, que busca automáticamente el nombre del método (por ejemplo, {{ User.name }} buscará User->getName() y, si no lo encuentra, buscará User->name() )

Si está reutilizando esta parte y quiere ser dinámico, también podría ser una buena idea crear una extensión Twig personalizada.

Creo que solo necesitará un servicio si va a hacer cosas muy complicadas en las que también necesita inyectar el EntityManager y también recuperar datos de otras entidades que tal vez no sean parte de las relaciones habituales.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda