Para crear un modelo de base de datos relacional lógico y físico y un modelo de diseño de clase que sea flexible y lo suficientemente extensible para permitir que las aplicaciones evolucionen sin mayores cambios, necesitamos comenzar por modelar el negocio. Específicamente, modelar entidades y sus relaciones junto con atributos especializados y asociaciones como ser la herencia. El artefacto que captura la realidad de una manera muy exacta es el Domain Model.
Pero a diferencia de la definición disponible en Wikipedia, me enfocarpe en el Modelo Relacional Unificado (RUP en sus siglas en inglés) que reza:
“Un modelo de objeto de negocio se enfoca en explicar productos, entregables o eventos que son importantes para el dominio de negocio. Tal modelo no incluye las responsabilidades con las que cargan las personas.“
Esta definición es todavía amplia y deja espacio para muchas interpretaciones. De acuerdo a RUP, incompleto significa que estamos modelando negocios parcialmente, sin procesar modelos o casos de negocio. Como complemento, tenemos la siguiente definición de Martin Fowler:
“Representación visual de clases conceptuales u objetos del mundo real en un dominio de interés.”
Esta definición también es amplia. Para ser aún más claros, nosotros solamente representamos entidades de negocio, sus relaciones y atributos. La definición de entidad también proviende de RUP:
“En el modelado de negocio, las entidades de negocio representan objetos a los que los trabajadores del negocio acceden, inspeccionan, manipulan, producen y demás”
Es importante saber que estamos modelando el negocio, en el mundo real actual. Pero con esas definiciones podremos modelar lo que sea.
La creación de un modelo de dominio está estructurado en los siguientes pasos:
Voy a detallar todos los pasos en un modelo. El lenguaje de modelaje será UML (Unified Modeling Language) ya que está cercanamente relacionado a RUP y tiene todos los elementos semánticos necesarios para obtener el nivel de expresividad deseado. En aras de buscar la completitud, los pasos incluirán un ejemplo en un dominio específico descripto a continuación:
En un área de muestreo de salud, los pacientes que deben realizar los exámenes ahora se reciben por orden de llegada o por agenda. Cada paciente es llamado por un recolector de muestras, quien prepara todos los elementos necesarios de acuerdo con la historia clínica del paciente y su necesidad de pruebas. Estos elementos son: insumos, tubos y recipientes necesarios, según el tipo de examen. Para cada tubo o recipiente utilizado en una muestra, el recolector lo etiqueta para establecer su origen y destino. Finalmente, las muestras se entregan para su envío al laboratorio correspondiente, a la espera de análisis y resultados.
Aquí podemos utilizar la lista de categorías de clase conceptual para identificarlas en el dominio de interés. Esta lista puede ser extendida todo lo que sea necesario.
Category | Examples |
Physical or tangible objects | Record, Airplane |
Specifications, designs or descriptions | Specification of Product, Fly Description |
Places | Store |
Transactions | Sale, Payment, Reservation |
Transaction details | Sale’s Detail |
Roles | Cashier, Engineer |
Containers | Store, Canister, Airplane |
Things in a container | Passenger |
External systems | Payment Authorization System |
Abstractions | Anxiety |
Organizations | Air Company |
Facts | Sale, Payment, Meeting, Fly, Landing |
Processes | Product’s Sale, Seat Reservation |
Policies and rules | Cancellation Policy |
Catalogs | Product’s Catalog |
Financial, working, contract and legal records | Receipt, Account Book, Contract |
Financial instruments and services | Credit Line, Stock |
Handbooks, documents, books, reference articles | Repair Manual |
Adicionalmente, debemos aplicar la estrategia del cartógrafo:
Por ejemplo, nuestro modelo de dominio en un contexto clínico tendrá las siguientes clases conceptuales:
Category | Domain Entities |
Physical or tangible objects | Syringe, Vacuum-Extraction Blood Tube, Urine Sample Container, Label, Vacuum-Extraction Blood Needle, Vacuum-Extraction Blood Tube Holder, Scalp Vein Set, Tourniquet, Kidney Dish, Sharp Container, Band-Aid, Cotton Ball, Procedure Gloves, Face Shield, Medical Mask, Goggles, Trash Can, Isopropyl Alcohol Bottle, Sterile Cotton Ball |
Specifications, designs or descriptions | |
Places | Blood Box, Urine Box, Waiting Room, Internal Laboratory, External Laboratory |
Transactions | External Laboratory Services Purchase |
Transaction details | Patient’s Basic Personal Information, Hospital Tributary Identification, Laboratory Exam’s Name |
Roles | Patient, Sample Collector, Medic, Sample Collection Manager, Statistician |
Containers | Vacuum-Extraction Blood Tube, Urine Sample Container, Sharp Container, Trash Can, Isopropyl Alcohol Bottle, Bag, Box |
Things in a container | Blood Sample, Urine Sample, Syringe, Vacuum-Extraction Blood Tube, Urine Sample Container, Label, Vacuum-Extraction Blood Needle, Vacuum-Extraction Blood Tube Holder, Scalp Vein Set, Band-Aid, Cotton Ball, Procedure Gloves, Medical Mask, Isopropyl Alcohol, Sterile Cotton Ball |
External systems | |
Abstractions | Specialty |
Organizations | Hospital, External Laboratory |
Facts | Exams Order, Exams Order Entry, Exam Order Entry Status, Patients Schedule, Patients Schedule Entry, Patient Schedule Entry Status, External Laboratory Services Purchase Order, External Laboratory Services Purchase Order Entry, External Laboratory Services Purchase Order Entry Status |
Processes | |
Policies and rules | Clinical Supplies per Exam |
Catalogs | |
Financial, working, contract and legal records | Exams Order, Patients Schedule, External Laboratory Services Purchase Order, Exam Results, List of Daily Exams |
Financial instruments and services | Stock for the following tangible objects: Syringe (100 units per box), Vacuum-Extraction Blood Tube (100 units per plumavit gravel), Urine Sample Container (100 units per bag), Vacuum-Extraction Blood Needle (50 units per box), Vacuum-Extraction Blood Tube Holder (20 units per box), Scalp Vein Set (50 units per box), Tourniquet (10 units per box), Band-Aid (100 units per box or bag), Cotton Ball (50 units per bag), Procedure Gloves (100 units per box), Medical Mask (50 units per box), Isopropyl Alcohol Bottle (50 units per box), Sterile Cotton Ball (50 units per bag). Others: Critical Stock. |
Handbooks, documents, books, reference articles |
Ahora es el momento de diagramar las entidades identificadas en un modelo de dominio. Esto se puede lograr usando el diagrama de clases UML de una manera simplificada: sin tipos de datos, calificadores e indicadores de visibilidad.
El siguiente fundamento se aplica a la representación:
La siguiente figura muestra las entidades de dominio representadas en un diagrama de clases UML simplificado, con asociaciones, atributos y multiplicidad:
Al crear un modelo de dominio, logramos una comprensión más profunda y compartida del dominio que se está representando. También podemos comunicar nuestras ideas y pensamientos sobre ese dominio gracias al modelo. Normalmente es una herramienta que se complementa muy bien con historias de usuario o casos de uso y también permite la creación de prototipos de UI.
El modelado del dominio dirige el modelado lógico y físico de un modelo de datos relacionales. Esto se puede lograr siguiendo los 8 pasos del algoritmo diseñado por Elmasri Navathe. Un buen modelo de diseño de clases se puede diagramar comenzando con el modelo de dominio, siguiendo también algunos pasos y asignando responsabilidades utilizando patrones GRASP