Host, Workflow, dan Custom Business Logic Object

Sebelum masuk ke coding, ada baiknya kita memahami istilah berikut ini :

  1. Host
  2. Workflow
  3. Custom Business Logic Object

Terminologi ini akan memudahkan kita untuk melihat sudut pandang aplikasi berbasis workflow.

HOST

Host adalah tempat dimana workflow "dilekatkan". Artinya, workflow ini tidak dapat berdiri sendiri. Dia perlu ditumpangkan pada induknya, yakni host. Host bisa berarti aplikasi console, aplikasi dekstop, aplikasi web, atau aplikasi mobile via workflow yang diexpose sebagai web service.

Host ini nantinya akan mengatur daur hidup workflow melalui object Workflow Runtime dan Workflow Instance. Artinya, workflow Anda akan di create dan di load pada saat runtime pada host. Karena di load pada saat runtime, maka secara otomatis thread yang digunakan otomatis akan mengikuti thread host-nya. Dengan teknik khusus, kita memang bisa mengatur supaya si workflow ini berjalan pada thread yang berbeda, tapi kita perlu trik untuk melakukan itu dengan cara membuat semacam workflow helper (menggunakan singleton dan factory pattern) yang akan load workflow instance dan meletakkannya pada thread tersendiri. Penjelasan detail bagaimana melakukan itu akan saya jelaskan di artikel yang akan datang.

Intinya, host adalah aplikasi pemanggil workflow dimana workflow dilekatkan. Bisa berupa console, desktop, web, atau mobile melalui mekanisme web service.

WORKFLOW

Saya tidak akan membahas workflow dari sisi skenario bisnis. Saya akan memberikan gambaran mengenai istilah 'workflow' pada terminologi Workflow Foundation. Di dalam WF, ada 4 jenis workflow yang bisa dibuat yakni Sequential, State Machine, Workflow Activity Library, dan Workflow Library.

By default, jika kita memilih Sequential maka Visual Studio akan membuatkan 1 buah workflow dan 1 buah host bertipe console application. Demikian juga untuk State Machine.

Workflow Library, secara umum merupakan kumpulan workflow dalam satu project. Ia merupakan kumpulan workflow yang nanti dicompile menjadi DLL tunggal dan direferensikan pada host yang memanggilnya. Di dalamnya Anda bisa membuat sequential workflow ataupun state machine workflow atau gabungan keduanya. Masing-masing secara logic dibedakan dari penggunaan Namespace dan nama class dari masing-masing workflow. Host nanti akan me-load dari nama namespace dan class yang dipanggil.

Workflow Activity Library, secara umum konsepnya sama seperti User Control. Disini Anda membuat sebuah activity (yaitu unit terkecil suatu workflow yang berisi fungsionalitas tertentu. Mirip seperti web part pada SharePoint atau module pada DotNetNuke atau user control pada general .NET development). Activity ini nanti akan "nempel" pada toolbox dan dapat Anda integrasikan pada workflow yang Anda pilih (sequential atau state machine). Activity ini dapat di load juga secara otomatis saat runtime atau disimpan sebagai file .xoml yang nanti akan dicompile on-the-fly oleh kode pemanggilnya untuk diintegrasikan pada suatu workflow.

CUSTOM BUSINESS LOGIC OBJECT

Custom business logic object (CBO) biasanya terdiri dari satu atau lebih object yang mewakili entiti pelaku skenario bisnis dan satu atau lebih kelas yang doing something terhadap entiti tersebut. Pendekatannya pun tergantung dari kemampuan si developer itu sendiri. Ada yang paham mengenai design pattern dan OOP yang cukup matang, lalu membuat CBO berdasarkan pendekatan tersebut. Itu bagus. Intinya, semua berbasis class dan kembali ke konsep OOP.

Meski demikian, kadang ada juga yang sederhana. Tapi umumnya, kebanyakan dari kita memuat informasi suatu class yang terdiri dari properties dan method. Kita bahkan jarang menggunakan event di dalam CBO kita. Nah, disitulah masalahnya. Kurangnya pemahaman kita dalam melihat kelengkapan suatu class dan apa yang bisa kita hasilkan dari situ. Pada beberapa activity di dalam workflow, event sangat berperan penting.

Di dalam terminologi workflow, CBO bisa dibagi menjadi dua yakni CBO yang berada di luar domain workflow (direferensikan sebagai DLL yang harus diinstantiate di dalam workflow) dan CBO yang diregister ke dalam workflow sebagai service melalui mekanisme ExternalDataExchangeService. Perbedaannya adalah dari cara mengaksesnya. Pada CBO yang direferensikan sebagai DLL bukan sebagai service, maka Anda harus melakukan instantiate suatu class sebelum menggunakannya. Problem pada CBO model tersebut secara umum tidak akan berefek pada workflow karena Anda bisa trapping itu menggunakan mekanisme error catching seperti biasa. Kelemahannya adalah lebih lambat karena berada pada domain yang berbeda dengan workflow dan tidak bisa digunakan bersamaan dengan Workflow Activity Library (WAL). Sedangkan CBO yang direferensikan sebagai service, performancenya jauh lebih cepat karena ia berada didalam bagian dari workflow itu sendiri dan dapat langsung diakses tanpa mekanisme instantiate seperti halnya model yang pertama. Ia juga bisa mengakses dan diakses via Workflow Activity Library secara langsung.

Beberapa jenis WAL yang menggunakan pendekatan tersebut adalah HandleExternalEventActivity dan CallExternalMethodActivity. Kedua activity tersebut memerlukan CBO yang diregister sebagai service dan menggunakan teknik passing data berbasis event. Maka tentunya kelas yang kita buat pada CBO harus "dipersenjatai" dengan pemahaman sintaks dan implementasi event di dalamnya. Tanpa itu, kita sulit untuk mengintegrasikannya dengan workflow.

Semoga penjelasan tersebut bisa dipahami dengan mudah. Saya akan melanjutkan di artikel yang akan datang.

Share this post: | | | |
Published Tuesday, August 21, 2007 2:08 PM by agung
Filed under:

Comments

No Comments