java - persistencia - ¿Cuál es la diferencia entre la clase de negocio y la clase de dominio? ¿Qué se entiende por clases persistentes?
persistencia hibernate (5)
¿Cuál es la diferencia entre la clase de negocio y la clase de dominio? ¿Qué se entiende por clases persistentes?
Los términos Negocio y Dominio se usan a menudo como sinónimos. Personalmente, prefiero los términos Modelo de dominio , Objeto de dominio , etc., ya que no están limitados a tratar con negocios (sea lo que sea).
Como ejemplo, en Safewhere trabajamos principalmente con Identidad y Autorización basada en Reclamaciones. Los conceptos que modelamos tienen muy poco en común con el "negocio" tradicional, por lo que en tales casos, creo que el Modelo de Dominio es un término más apropiado.
Una clase de dominio es una clase del Modelo de dominio que Martin Fowler describe como sigue en Patrones de arquitectura de aplicaciones empresariales :
Un modelo de objeto del dominio que incorpora tanto el comportamiento como los datos.
En el peor de los casos la lógica empresarial puede ser muy compleja. Las reglas y la lógica describen muchos casos y sesgos de comportamiento diferentes, y es esta complejidad con la que se diseñaron los objetos para trabajar. Un modelo de dominio crea una red de objetos interconectados, donde cada objeto representa a una persona significativa, ya sea como una corporación o tan pequeña como una sola línea en un formulario de pedido.
Y para mí, no hay diferencia con una clase de negocios : un objeto de negocios no realiza más o menos lógica de negocios que un objeto de dominio (un modelo de dominio en el que la lógica de negocios se implementa fuera de los objetos de dominio se llama un Modelo de Dominio Anémico , que es un término peyorativo), los objetos de dominio y los objetos de negocio son la misma cosa.
Finalmente, una clase persistente es una clase que puede ... persistir, lo que significa transferir una representación de información en memoria a un almacenamiento físico que persistirá más allá de la vida de la JVM. A menudo, la persistencia se implementa utilizando una base de datos (pero esta no es la única solución, consulte, por ejemplo, la prevalencia de objetos ). Las operaciones de persistencia típicas incluyen crear, leer, actualizar y eliminar, que se conocen como operaciones CRUD. Los objetos de dominio son frecuentemente persistentes, es decir, puede realizar operaciones CRUD en ellos a través de una API que oculta los detalles subyacentes del motor de persistencia elegido.
Una clase de "dominio" es aquella que modela sus datos. Normalmente se usa para asignar datos de su almacén de datos (por ejemplo, una base de datos) a un objeto en memoria. Una clase de negocios es aquella con la que trabaja tu aplicación. Puede ser la misma que la clase de dominio y, por lo general, realiza algún tipo de lógica de negocios o procesamiento.
La persistencia se refiere a la capacidad del estado del objeto para guardarse en algún almacén de datos (por ejemplo, xml, un archivo de texto o, más comúnmente, una base de datos). Por lo tanto, el estado de este tipo de objeto "persiste" si la aplicación se está ejecutando o no.
Me suena como si tuvieras curiosidad por los objetos / mapeo relacional. Recomiendo leer este artículo de wikipedia para comenzar.
Una clase de negocios proporciona lógica específica de dominio.
Una clase de dominio es una entidad que representa parte del dominio.
Una clase persistente, o mejor, una instancia persistente, tiene los mismos datos después de un reinicio del servidor (los datos generalmente se almacenan en una base de datos de algún tipo).
Tomemos como ejemplo una transacción bancaria. Tendrías una Account
clase de dominio persistente. Mi Account
(una instancia) tendría un campo Balance
con valor 1000.
La lógica de negocios de transacción que maneja el débito es algo como AccountDebit
y tiene como método debitAccount(Account account, int amount)
, y como lógica de negocios
int balance = account.getBalance();
if (balance < amount) {
throw exception("You''re too poor");
}
balance = balance - amount;
account.setBalance(balance);
account.commit(); // save the values to persistent store
Y sí sé que el dinero normalmente no es un int, y que la cantidad debitada normalmente se acredita a otra persona :)
Las clases de negocios son clases que están diseñadas y utilizadas para proyectos específicos y difícilmente reutilizables para otros proyectos.
Las clases de dominio son clases diseñadas y utilizadas para un dominio específico que pueden ser utilizadas por varios proyectos que hacen algo similar.
Por ejemplo, las clases JDBC son clases de dominio para el acceso a la base de datos. Las clases de swing son clases de dominio para la construcción y manipulación de GUI. Form1
que contiene un conjunto de componentes utilizados para mostrar el mensaje "Hola mundo", es de clase empresarial.