Classes
Concepts
Concepts are similar to class declarations in most object-oriented languages, in that they may have a super-type and a set of typed properties:
abstract concept Animal {
o DateTime dob
}
concept Dog extends Animal {
o String breed
}
Concepts can be declared abstract
if it should not be instantiated (must be subclassed).
Identity
Concepts may optionally declare an identifying field, using either the identified by
(explicitly named identity field) or identified
($identifier
system identity field) syntax. Identifying fields must have type String
.
Person
below is defined to use the email
property as its identifying field.
concept Person identified by email {
o String email
o String firstName
o String lastName
}
While Product
below will use $identifier
as its identifying field.
concept Product identified {
o String name
o Double price
}
Assets
An asset is a class declaration that has a single String
property which acts as an identifier. You can use the modelManager.getAssetDeclarations
API to look up all assets.
asset Vehicle identified by vin {
o String vin
}
Assets are implicitly identified
if you do not specify your own identifing property. The property name is $identifier
.
Assets are typically used in your models for the long-lived identifiable Things (or nouns) in the model: cars, orders, shipping containers, products, etc.
Participants
Participants are class declarations that have a single String
property acting as an identifier. You can use the modelManager.getParticipantDeclarations
API to look up all participants.
participant Customer identified by email {
o String email
}
Participants are implicitly identified
if you do not specify your own identifing property. The property name is $identifier
.
Participants are typically used for the identifiable people or organizations in the model: person, customer, company, business, auditor, etc.
Transactions
Transactions have an implicit $timestamp
property with type DateTime
. You can use the modelManager.getTransactionDeclarations
API to look up all transactions.
transaction Order {
}
Transactions are typically used in models for the identifiable business events or messages that are submitted by Participants to change the state of Assets: cart check out, change of address, identity verification, place order, etc.
Events
Events are similar to Transactions in that they are also class declarations that have a $timestamp
property. You can use the modelManager.getEventDeclarations
API to look up all events.
event LateDelivery {
}
Events are typically used in models for the identifiable business events or messages that are emitted by logic to signify that something of interest has occurred.