Al comenzar con InterSystems IRIS o Caché, los desarrolladores a menudo se encuentran con tres conceptos fundamentales: Dynamic Objects, Globals y Relational Table. Cada uno tiene su papel en la construcción de soluciones escalables y mantenibles. En este artículo recorreremos ejemplos prácticos de código, destacaremos buenas prácticas y mostraremos cómo estos conceptos se relacionan entre sí.
1. Trabajando con Dynamic Objects:
Los objetos dinámicos (%DynamicObject y %DynamicArray) permiten a los desarrolladores manipular estructuras similares a JSON directamente en ObjectScript. Son especialmente útiles para aplicaciones modernas que necesitan analizar, transformar o generar JSON.
Ejemplo: Crear y manipular Dynamic Objects
// Create a Dynamic object
Set obj - {}
// Add properties
Set obj.name = "Vachan"
Set obj.age = 25
// Nested objects
Set obj.address = {"city":"Bengaluru", "zip":"560000"}
// Add an Array
Set obj.skills = ["Objectscript", "SQL"]
// Convert to JSON string
Set json = obj.%ToJSON()
Write json,!
// Parse JSON string back to an object
Set parser = {}.%FromJSON(json)
Write parser.name
Mejores prácticas
- Validad siempre la entrada JSON con %FromJSON() para detectar errores.
- Usad obj.%Get("property") cuando no estéis seguros de que una propiedad exista.
- Preferid %DynamicArray para estructuras de tipo lista.
2. Usando Globals de manera efectiva:
Los Globals son arrays dispersos jerárquicos almacenados directamente en el motor de la base de datos IRIS. Son extremadamente rápidos y pueden almacenar prácticamente cualquier estructura.
Ejemplo: Almacenando datos en Globals
// Store student data in a global
SET ^Student(1,"Name") = "Alice"
SET ^Student(1,"Age") = 29
SET ^Student(2,"Name") = "Bob"
SET ^Student(2,"Age") = 34
// Retrieve data
WRITE ^Student(1,"Name") // outputs: Alice
// Iterate over all students
SET id=""
FOR SET id=$ORDER(^Student(id)) QUIT:id="" {
WRITE "Student ",id,": ",^Student(id,"Name")," (Age ",^Student(id,"Age"),")",!
}
Mejores prácticas:
- Definid una estructura clara para el global antes de codificar (evitad claves ad-hoc).
- Usad globals para almacenamiento de alto rendimiento cuando no se necesite la sobrecarga de SQL.
- Para los datos de la aplicación, preferid clases persistentes con globals gestionados internamente.
3. Creación de tablas relacionales SQL:
En IRIS, las tablas relacionales se pueden crear tanto usando SQL DDL como clases persistentes.
Ejemplo: Crear una tabla SQL mediante DDL
CREATE TABLE Employee (
ID SERIAL PRIMARY KEY,
Name VARCHAR(50),
Age INT,
Department VARCHAR(50)
);
Ejemplo: Crear la misma tabla como Clase Persistente
Class Company.Employee Extends (%Persistent) {
Property Name As %String(MAXLEN=50);
Property Age As %Integer;
Property Department As %String(MAXLEN=50);
}
Una vez compilada, esta clase crea automáticamente un global subyacente y una tabla SQL. Ahora podéis usar tanto ObjectScript como SQL:
// Create and save an employee
SET emp = ##class(Company.Employee).%New()
SET emp.Name = "Charlie"
SET emp.Age = 40
SET emp.Department = "IT"
DO emp.%Save()
// Query employees with SQL
&sql(SELECT Name, Age FROM Company.Employee)
WHILE (SQLCODE=0) {
WRITE "Employee: ",Name,", Age: ",Age,!
FETCH NEXT
}
Mejores Prácticas:
- Preferid clases persistentes para aplicaciones mantenibles.
- Usad SQL DDL para definiciones rápidas de tablas o integración con sistemas externos.
- Definid siempre índices para las propiedades que se consultan con frecuencia.
RESUMEN:
Ya sea que estéis analizando cargas JSON, gestionando datos de acceso rápido o diseñando tablas relacionales, entender cuándo usar objetos dinámicos, globals o clases persistentes es clave para convertiros en desarrolladores efectivos de ObjectScript.