Classes de modelo de dados
O ORDA permite-lhe criar funções de classe de alto nível acima do modelo de dados. Isto permite-lhe escrever código orientado para o negócio e "publicá-lo" tal como uma API. Datastore, classes de dados, seleções de entidades e entidades estão todos disponíveis como objetos de classe que podem conter funções.
Por exemplo, pode criar uma função getNextWithHigherSalary()
na classe EmployeeEntity
para devolver os empregados com um salário superior ao selecionado. Seria tão simples como chamar:
$nextHigh:=ds. Employee.get(1).getNextWithHigherSalary()
Os desenvolvedores podem não só utilizar estas funções em datastores locais, mas também em arquiteturas cliente/servidor e remotas:
//$cityManager é a referência de um datastore remoto
Form.comp.city:=$cityManager.City.getCityName(Form.comp.zipcode)
Graças a esta caraterística, toda a lógica comercial da sua aplicação 4D pode ser armazenada como uma camada independente para que possa ser facilmente mantida e reutilizada com um alto nível de segurança:
-
É possível "esconder" a complexidade global da estrutura física subjacente e expor apenas funções compreensíveis e prontas a utilizar.
-
Se a estrutura física evoluir, pode simplesmente adaptar o código da função e as aplicações cliente continuarão a chamá-las de forma transparente.
-
Por predefinição, todas as suas funções de classe do modelo de dados (incluindo funções de atributo computadas) e atributos de alias não são expostas a aplicações remotas e não podem ser chamadas a partir de pedidos REST. É necessário declarar explicitamente cada função pública e alias com a palavra-chave
exposed
.
Além disso, 4D pré-criou automaticamente as classes para cada objeto de modelo de dados disponível.
Arquitetura
A ORDA fornece classes genéricas expostas através da loja de classes 4D
, bem como classes de utilizador (que estendem as classes genéricas) expostas na loja de classes cs
:
Todas as classes do modelo de dados ORDA são expostas como propriedades do armazenamento de classes cs
. Estão disponíveis as seguintes classes ORDA:
Class | Nome do exemplo | Instanciado por |
---|---|---|
cs. DataStore | cs. DataStore | comando ds |
cs.DataClassName | cs. Employee | dataStore. DataClassName , dataStore["DataClassName"] |
cs.DataClassNameEntity | cs. EmployeeEntity | dataClass.get() , dataClass.new() , entitySelection.first() , entitySelection.last() , entity.previous() , entity.next() , entity.first() , entity.last() , entity.clone() |
cs.DataClassNameSelection | cs. EmployeeSelection | dataClass.query() , entitySelection.query() , dataClass.all() , dataClass.fromCollection() , dataClass.newSelection() , entitySelection.drop() , entity.getSelection() , entitySelection.and() , entitySelection.minus() , entitySelection.or() , entitySelection.orderBy() , entitySelection.orderByFormula() , entitySelection.slice() , Create entity selection |
As classes de utilizador ORDA são armazenadas como arquivos de classe normais (.4dm) na subpasta Classes do projeto (ver abaixo).
Além disso, as instâncias de objetos das classes de usuárioes do modelo de dados ORDA beneficiam das propriedades e funções dos seus pais:
- um objeto da classe Datastore pode chamar funções da classe genérica ORDA Datastore.
- um objeto da classe Dataclass pode chamar funções da classe genérica ORDA Dataclass.
- um objeto da classe Seleção de entidades pode chamar funções da classe genérica ORDA Seleção de entidades.
- um objeto da classe Entidade pode chamar funções da classe genérica ORDA Entity.
Descrição da classe
Histórico
Release | Mudanças |
---|---|
19 R4 | Atributos alias na Entity Class |
19 R3 | Atributos calculados en la Entity Class |
18 R5 | As funções de classe do modelo de dados não são expostas ao REST por defeito. Novas palavras-chave exposed e local . |
Classe DataStore
Uma base de dados 4D expõe a sua própria classe DataStore na loja de classes cs
.
- Extends: 4D. DataStoreImplementation
- Class name: cs. DataStore
É possível criar funções na classe DataStore que estarão disponíveis através do objeto ds
.
Exemplo
// cs. DataStore class Class extends DataStoreImplementation Function getDesc
$0:="Database exposing employees and their companies"
Esta função pode então ser chamada:
$desc:=ds.getDesc() //"Database exposing..."
Classe DataClass
Cada tabela exposta com ORDA oferece uma classe DataClass no armazenamento de classes cs
.
- Extends: 4D. DataClass
- Nome da classe: cs.DataClassName (em que DataClassName é o nome da tabela)
- Example name: cs. Employee
Exemplo
// cs. Company class Class extends DataClass
// Returns companies whose revenue is over the average
// Returns an entity selection related to the Company DataClass Function GetBestOnes()
$sel:=This.query("revenues >= :1";This.all().average("revenues"));
$0:=$sel
Em seguida, pode obter uma seleção de entidades das "melhores" empresas através da execução:
var $best : cs. CompanySelection
$best:=ds. Company. GetBestOnes()
Os atributos computados são definidos na classe de entidade .
Exemplo com um datastore remoto
O seguinte catálogo City está exposto num datastore remoto (vista parcial):
A classe City
fornece uma API:
// cs. City class Class extends DataClass Function getCityName()
var $1; $zipcode : Integer
var $zip : 4D. Entity
var $0 : Text
$zipcode:=$1
$zip:=ds. ZipCode.get($zipcode)
$0:=""
If ($zip#Null)
$0:=$zip.city.name
End if
A aplicação cliente abre uma sessão no datastore remoto:
$cityManager:=Open datastore(New object("hostname";"127.0.0.1:8111");"CityManager")