DominoJS: Global Pattern of Communication

DominoJS: Global Pattern of Communication

DominoJS adalah library yang membantu Anda dalam mengkomunikasikan antara berbagai bagian aplikasi. Dalam artikel ini, kita akan membahas tentang fitur-fitur yang tersedia di DominoJS.

Client Service

Client service adalah library yang dapat diintegrasikan ke dalam aplikasi frontend Anda. Fungsinya untuk memudahkan komunikasi dengan web service yang menghadap ke depan.

Action

Action adalah fungsi yang mengirimkan pesan ke aktor. Fungsi ini kembali sebagai promesse. Action juga dapat menerima callback yang akan di-trigger ketika aktor mengembalikan tanggapan.

Contoh:

function createFoo(foo) {
 domino.action('foo.create', foo, progress)
 .then((payload) => toaster.success('Foo has been created'))
 .catch((err) => console.error(err))
}

function progress(payload){
 console.log('some progress...', payload)
}

Subscription

Frontend dapat berlangganan ke pesan yang dibroadcast. Wildcard dapat digunakan untuk menggantikan satu kata. Subscription juga dapat menerima interpolasi menggunakan variabel konteks.

Perubahan variabel konteks akan secara otomatis menghentikan langganan dari saluran sebelumnya dan memulai langganan pada saluran baru.

Contoh:

import FooActions from './FooActions'
import domino from '../domino'


function fooEventHandler(payload, type){
 switch(type){
 case 'foo.adCreated':
 FooActions.adCreated(payload)
 break;
 case 'foo.adUpdated':
 FooActions.adUpdated(payload)
 break;
 }
}

domino.register('foo.*', fooEventHandler);

// menggunakan string interpolation
domino.register('[account_id].*', accountEventHandler);
domino.setContext({account_id: '123'})

Connection Loss

Jika terjadi kehilangan koneksi, registrasi harus memulai langganan ulang ketika koneksi dipulihkan.

Front Service

Front service adalah layanan yang menghadap ke depan dan menawarkan endpoint socket.io dan REST.

Rest Endpoint

Endpoint REST dibuat berdasarkan deskonstruksi aksi. Contoh, 'foo.bar' akan menjadi tersedia di /foo/bar sebagai permintaan POST.

Socket

Socket memungkinkan frontend untuk menerima data yang di-push oleh pengawak ketika mereka mengroadcast informasi pada saluran tertentu.

Middleware

Middleware global dapat didefinisikan.

Contoh:

function fooMiddleware(message, request){
 const augmentedMessage = Object.assign({}, message, {foo: 'bar'})
 request.resolve(augmentedMessage);
}

domino.use(fooMiddleware)

Sub-domain middleware:

Middleware domain sub dapat didefinisikan.

Contoh:

function middleware(message, request){
 if(message.foo){
 request.resolve(message);
 } else {
 request.reject(message)
 }
}

domino.domain('foo')
 .use(middleware)
 .actor(...)

Back Service

Back service menghandle aktor dan pengawak. Pekerja juga dapat dibuat di sini. Namun, tidak disarankan untuk memunggulkan informasi dari pekerja, tetapi sebaliknya memanggil aktor lain dengan payload ketika memerlukan memunggulkan informasi.

Actors

Aktor adalah penerima aksi. Mereka dapat menjawab permintaan menggunakan objek tanggapan. Mereka juga mengumumkan perubahan melalui objek dispatch. Dispatch terbatas pada domainnya hanya untuk menegakkan perilaku yang lebih prediktif.

Contoh:

// Actor definition
function createBar(message, response, dispatch) {
 myForm.submit(message.content.payload)
 .then(function(record){
 response.ok({message: 'Creation successful'})
 // will dispatch bar.created (bar being the domain)
 dispatch('created', record)
 })
 .catch(function(err){
 response.error(err)
 })
}

// Register the actor on the bar domain, it will be
// triggered by the 'bar.createFoo' action.
domino.domain('bar')
 .actor('create', createBar)

Watchers

Pengawak menerima data yang di-dispatch oleh aktor.

Contoh:

// Watcher definition
function barCreateWatcher(message, broadcast) {
 // will broadcast on 'foo.created' (foo being the domain)
 broadcast('created', message.content.payload)
}

// Register the watcher. It will be called when 'bar.created'
// message is being dispacthed by an actor.
domino.domain('foo')
 .watcher('barCreateWatcher', barCreateWatcher)

##DominoJS adalah library yang membantu Anda dalam mengkomunikasikan antara berbagai bagian aplikasi. Dengan fitur-fiturnya, Anda dapat membuat aplikasi yang lebih efektif dan mudah dipahami.