Programação Prática em ObjectScript: De JSON a Globals e a SQL
Ao começar a usar o InterSystems IRIS ou Cache, os desenvolvedores frequentemente se deparam com três conceitos principais: Objetos Dinâmicos, Globals e Tabela Relacional. Cada um tem seu papel na construção de soluções escaláveis e fáceis de manter. Neste artigo, vamos percorrer exemplos de código práticos, destacar as melhores práticas e mostrar como esses conceitos se conectam.
1. Trabalhando com Objetos Dinâmicos
Objetos dinâmicos (%DynamicObject e %DynamicArray) permitem que os desenvolvedores manipulem estruturas semelhantes a JSON diretamente no ObjectScript. Eles são especialmente úteis para aplicações modernas que precisam analisar, transformar ou gerar JSON.
Exemplo: Criando e Manipulando Objetos Dinâmicos
// Create a Dynamic objectSet obj - {}
// Add propertiesSet obj.name = "Vachan"Set obj.age = 25// Nested objectsSet obj.address = {"city":"Bengaluru", "zip":"560000"}
// Add an ArraySet obj.skills = ["Objectscript", "SQL"]
// Convert to JSON stringSet json = obj.%ToJSON()
Write json,!
// Parse JSON string back to an objectSet parser = {}.%FromJSON(json)
Write parser.nameMelhores Práticas
- Sempre valide a entrada JSON com
%FromJSON()para capturar erros. - Use
obj.%Get("property")quando não tiver certeza se uma propriedade existe. - Prefira
%DynamicArraypara estruturas do tipo lista..
2. Usando Globals de forma Eficaz
Globals são arrays esparsos hierárquicos armazenados diretamente no motor de banco de dados do IRIS. Eles são extremamente rápidos e podem armazenar praticamente qualquer estrutura.
Exemplo: Armazenando Dados em Globals
// Store student data in a globalSET^Student(1,"Name") = "Alice"SET^Student(1,"Age") = 29SET^Student(2,"Name") = "Bob"SET^Student(2,"Age") = 34// Retrieve dataWRITE^Student(1,"Name") // outputs: Alice// Iterate over all studentsSET id=""FORSET id=$ORDER(^Student(id)) QUIT:id="" {
WRITE"Student ",id,": ",^Student(id,"Name")," (Age ",^Student(id,"Age"),")",!
}Melhores Práticas:
- Defina uma estrutura global clara antes de codificar (evite chaves ad hoc).
- Use globals para armazenamento de alto desempenho quando o overhead do SQL não for necessário.
- Para dados de aplicação, prefira classes persistentes com globals gerenciados internamente
3. Criando Tabelas SQL Relacionais
No IRIS, tabelas relacionais podem ser criadas usando DDL SQL e classes persistentes.
Exemplo: Criando uma Tabela SQL via DDL
CREATETABLE Employee (
IDSERIAL PRIMARY KEY,
NameVARCHAR(50),
Age INT,
Department VARCHAR(50)
);Exemplo: Criando a mesma tabela como uma Classe Persistente
Class Company.Employee Extends (%Persistent) {
Property Name As%String(MAXLEN=50);Property Age As%Integer;Property Department As%String(MAXLEN=50);
}Uma vez compilada, esta classe cria automaticamente um global subjacente e uma tabela SQL. Agora você pode usar tanto o ObjectScript quanto o SQL:
// Create and save an employeeSET emp = ##class(Company.Employee).%New()
SET emp.Name = "Charlie"SET emp.Age = 40SET emp.Department = "IT"DO emp.%Save()
// Query employees with SQL
&sql(SELECTName, Age FROM Company.Employee)
WHILE (SQLCODE=0) {
WRITE"Employee: ",Name,", Age: ",Age,!
FETCH NEXT
}Melhores Práticas:
- Prefira classes persistentes para aplicações fáceis de manter.
- Use DDL SQL para definições rápidas de tabelas ou integração com sistemas externos.
- Sempre defina índices para propriedades frequentemente consultadas.
RESUMO:
Seja para analisar payloads JSON, gerenciar dados de consulta de alta velocidade ou projetar tabelas relacionais, entender quando usar objetos dinâmicos, globals ou classes persistentes é fundamental para se tornar um desenvolvedor ObjectScript eficaz.