Artigo
· 18 hr atrás 3min de leitura

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 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

Melhores 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 %DynamicArray para 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 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"),")",!
}

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

CREATE TABLE Employee (
    ID SERIAL PRIMARY KEY,
    Name VARCHAR(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 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
}

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.

Discussão (0)1
Entre ou crie uma conta para continuar