Home > Domain Driven Design > Service (Part 3) Domain Layer dan Application Layer

Service (Part 3) Domain Layer dan Application Layer

Term service ini merupakan term yg overload. Domain Service. Application Service, Infrastructure Service. Jadi kita harus bisa menentukan operasi tersebut diletakkan di layer yg mana. Domain service dan Application Service berkolaborasi dengan Infrastructure service.

Contohnya aplikasi bank memiliki fitur mengirimakn email ke nasabahnya jika account balancenya melewati batas yg ditentukan. Nah service dari email atau notifikasi ini merupakan kepemilikan dari infrastructure layer.

Nah sekarang yg kita harus pisahkan adalah domain dan application service. Hal tersebut tergantung dengan domainya. Jika dia mengandung bisnis rule maka letakkan di domain service dan jika tidak letakkan di application service. Tidak boleh ada bisnis logic pada application service.

Contoh :

Konversi Format File dari transaction file ke dalam format spreadsheet. Ini merupakan tanggung jawab application layer.

Transfer Account : hubungnnya erat dengan domain. Hubungan antar 2 account. Berada di domain layer.

Nah coba kita lihat pembagian Service dalam layer2 :

Application
1. Fund Transfer App Service

a. Melakukan konversi terhadap XML request. Tergantung dengan format yg dikirimkan dalam bentuk apa. Jika yg dikirim DTO maka harus diubah dulu dengan menggunakan Assembler
b. Mengirim pesan ke domain service untuk diproses. Setelah melakukan konversi dari DTO ke Entity dengan menggunakan Assembler maka Entity tersebut dikirim ke Domain Service untuk diproses.
c. Menunggu konfirmasi.
d. Memutuskan untuk mengirimkan notifikasi dengan menggunakan infrastructure service. Hasil dari domain layer digunakan untuk memutuskan aksi yg dilakukan
e. Mengubah hasil dari Domain ke dalam bentuk yg dapat ditransfer ke luar sesuai dengan format yg ditentukan penerimanya.

2. Fund Transfer Domain Service

a. Melakukan interaksi dengan Account dan Ledger object yg sesuai. Melakukan debit kredit yg sesuai
b. Mengembalikan confirmation result (Apakah transfer diperbolehkan atau tidak)

3. Send Notification Service
a. Mengirimkan Email, surat, atau komunikasi yg ditentukan oleh application layer.

Dengan adanya Domain Service kita dapat mempermudah koordinasi Entites dan Value Object. Karena biasanya Entities dan Value Object tersebut merupakan object yg granular. Sehingga dengan menggunakan service kita dapat menyembunyikan kerumitan komunikasi dan kordinasi dengan domain object. Karena service menyediakan interface yg dapat menyembunyikan kerumitan interaksi domain object.

Dan apabila Domainya fine grained (halus) maka bisa saja terjadi kebocoran ke application layer. Bisa saja koordinasi domain object tersebut terjadi di Application Layer. Hal ini tidak diperbolehkna. Domain tidak boleh bocor ke luar. Logic semuanya ditangani di Domain. Di Application layer kita hanya meminta result dari domain layer. Interaksi domain layer tersebut diakses melalui Domain Service. Jadi application layer hanya perlu memanggil Domain service dan tidak perlu melakukan koordinasi object tersebut secara langsung.

  1. jogisilalahi
    February 12, 2009 at 11:16 am

    heheh, baca judulnya jadi teringat mata kuliah yang kau ****, pra..
    CN..
    hahah..

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: