Dalam diskusi kami kemarin dengan rekan, .NET DataSet apakah bisa mewakili Domain Layer?
Sebagaimana design architecture yang berbasis 3 layer (DataAccess, Business Logic dan UI), kita perlu Domain Layer yang akan di-Reference oleh DataAccess, Business Logic, maupun UI dikarenakan ke-3 layer perlu object messaging dan object itu seharusnya sebagai Domain object.
Dalam OO programming, domain object adalah realisasi dari object enitity itu sendiri, misal Customer, Product, Supplier, etc. object ini yg akan dipassing sebagai mesaging object media antar layer.
Kemudian untuk bisa dibinding ke .NET server control harus implement IBindingList.
Untuk relational object berarti satu Domain object memiliki (has) collection of Domain object lain.
Sehingga perlu adanya object collection untuk menampung kumpulan single Domain object, if required.
Bagaimana dengan .NET DataSet?
DataSet juga object, bisa menampung data, baik single data maupun collection data, relevan untuk direference oleh DataAccess, Business Logic, maupun UI. Mudah bindable ke semua .NET server control. Sudah compatible dengan relational data karena dalam DataSet bisa menampung relational data dari beberapa table (DataTable) berikut relationalnya (DataRelation).
Kalau pertanyaan apakah .NET DataSet is Domain Data object?
Menurut saya jawabnya adalah Yes!, .NET DataSet is Domain Data object.
It usefull and good to be use for Domain Layer.
Kelebihannya .NET DataSet adalah development starting akan lebih cepat, kita tidak perlu memikirkan object model yang seperti apa agar bisa memenuhi semua requirements.
Kekurangannya kita harus mengetahui column name-column name karena media domainnya sama untuk semua domain entity, karena di situlah penerjemahan dari tiap property object yang ada.
Kelebihan custom Domain object adalah, penggunaan end user (programmer) lebih mudah, karena tiap entity akan berbeda object medianya, dengan masing2 property yang ada sudah merupakan terjemahan dari field2.
Kekurangannya, kita harus design custom domain object ini sebagus mungkin dan seefisien mungkin, ringan di memory, dan tentu juga harus bisa memenuhi requirement seperti bindable ke .NET controls. Sehingga development starting akan lebih lambat. (Kecuali anda sudah ada code generatornya! :) )
Recommendation?, terserah architect-nya dong.. :)
regards,