Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Bahasa khusus domain (DSL) didefinisikan oleh file Definisi DSL-nya, bersama dengan kode program kustom apa pun yang mungkin Anda tulis. Sebagian besar kode program dalam solusi DSL dihasilkan dari file ini.
Topik ini menjelaskan fitur pusat definisi DSL.
Definisi DSL (Digital Subscriber Line)
Saat Anda membuka Dsl\DslDefinition.dsl, jendela Visual Studio Anda menyerupai gambar di bawah ini.
Informasi terpenting dalam Definisi DSL ditampilkan dalam diagram Definisi DSL. Informasi tambahan, yang juga merupakan bagian dari DslDefinition.dsl, ditampilkan di DSL Explorer, yang biasanya muncul di sisi diagram. Anda bekerja dengan diagram untuk tugas yang paling sering, dan dengan DSL Explorer untuk penyesuaian yang lebih canggih.
Diagram Definisi DSL memperlihatkan kelas domain yang menentukan elemen model, dan hubungan yang menentukan tautan antar elemen model. Ini juga menunjukkan bentuk dan konektor yang digunakan untuk menampilkan elemen model kepada pengguna.
Saat Anda memilih item dalam definisi DSL, baik pada diagram atau di DSL Explorer, informasi tentang item tersebut ditampilkan di jendela Properti. Informasi tambahan dapat ditampilkan di jendela Detail DSL.
Model merupakan instance DSL
Model adalah instans DSL milik Anda yang dibuat oleh pengguna. Model berisi elemen model, yang merupakan instans kelas domain yang Anda tentukan, dan tautan antara elemen, yang merupakan instans hubungan domain yang Anda tentukan. Model juga dapat memiliki bentuk dan konektor, yang menampilkan elemen model dan tautan pada diagram. Definisi DSL mencakup kelas bentuk, kelas konektor, dan kelas untuk diagram.
Definisi DSL juga dikenal sebagai model domain. Definisi DSL (Domain-Specific Language) atau model domain adalah representasi pada saat desain dari bahasa khusus domain, sedangkan modelnya adalah instansiasi pada saat run-time dari bahasa khusus domain.
Kelas Domain menentukan Elemen Model
Kelas domain digunakan untuk membuat berbagai elemen di domain, dan hubungan domain adalah tautan antara elemen. Ini adalah representasi saat desain dari elemen dan tautan yang akan diinstansiasi oleh pengguna bahasa khusus desain saat mereka membangun model mereka.
Ilustrasi ini menunjukkan model yang telah dibuat oleh pengguna DSL pustaka musik. Album musik diwakili oleh kotak yang berisi daftar lagu. Artis diwakili oleh kotak berpojok bulat dan terhubung ke album yang mereka kontribusikan.
Definisi DSL memisahkan dua aspek. Tampilan elemen model pada diagram model didefinisikan dengan menggunakan kelas bentuk dan kelas konektor. Informasi yang dibawa dalam model didefinisikan menggunakan kelas domain dan hubungan domain.
Ilustrasi berikut menunjukkan kelas domain dan hubungan dalam Definisi DSL Pustaka Musik.
Ilustrasi menunjukkan empat kelas domain: Musik, Album, Artis, dan Lagu. Kelas domain menentukan properti domain seperti Nama, Judul, dan sebagainya. Dalam model instans, nilai beberapa properti ini ditampilkan pada diagram.
Di antara kelas-kelas terdapat hubungan domain: MusicHasAlbums, MusicHasArtists, AlbumHasSongs, dan ArtistAppearedOnAlbums. Hubungan memiliki perkalian seperti 1...1, 0..*. Misalnya, setiap Lagu harus terkait dengan tepat satu Album melalui hubungan AlbumHasSongs. Setiap Album dapat memiliki sejumlah Lagu.
Mengatur ulang Diagram Definisi DSL
Perhatikan bahwa kelas domain dapat muncul beberapa kali pada diagram Definisi DSL, seperti yang dilakukan Album dalam gambar ini. Selalu ada satu tampilan utama, dan mungkin ada beberapa tampilan referensi .
Untuk mengatur ulang diagram Definisi DSL, Anda dapat:
Tukar tampilan utama dan referensi dengan menggunakan perintah Bring Tree Here dan Split Tree . Klik kanan satu kelas domain untuk melihat perintah ini.
Urutan ulang kelas domain dan kelas bentuk dengan menekan Ctrl+Atas dan Ctrl+Bawah.
Gunakan ikon di kanan atas setiap bentuk untuk mengecilkan atau memperluas kelas.
Ciutkan bagian pohon dengan mengklik tanda minus (-) di bagian bawah kelas domain.
Pewarisan
Kelas domain dapat ditentukan menggunakan pewarisan. Untuk membuat turunan warisan, klik alat Warisan, klik kelas turunan, lalu klik kelas dasar. Elemen model memiliki semua properti yang ditentukan pada kelas domainnya sendiri, bersama dengan semua properti yang diwarisi dari kelas dasar. Hal ini juga mewarisi perannya dalam hubungan.
Pewarisan juga dapat digunakan antara Hubungan, Bentuk, dan Konektor. Warisan harus disimpan dalam grup yang sama. Objek bentuk tidak dapat mengambil sifat dari kelas domain.
Hubungan Domain
Elemen model dapat ditautkan oleh hubungan. Tautan selalu biner; mereka menautkan tepat dua elemen. Namun, elemen apa pun dapat memiliki banyak tautan ke objek lain, dan bahkan bisa ada lebih dari satu tautan antara sepasang elemen yang sama.
Sama seperti Anda dapat menentukan kelas elemen yang berbeda, Anda dapat menentukan kelas tautan yang berbeda. Kelas tautan disebut hubungan domain. Hubungan domain menentukan kelas elemen apa yang dapat disambungkan oleh instansnya. Setiap akhir hubungan disebut peran, dan hubungan domain mendefinisikan nama untuk dua peran tersebut, serta untuk hubungan itu sendiri.
Ada dua jenis hubungan domain: menyematkan hubungan dan hubungan referensi. Pada diagram Definisi DSL, hubungan penyematan memiliki garis tegas pada setiap perannya, dan hubungan referensi memiliki garis putus-putus.
Pengintegrasian Hubungan
Setiap elemen dalam model, kecuali akarnya, adalah target dari satu tautan penyematan. Oleh karena itu, seluruh model membentuk satu pohon tautan penyematan. Hubungan penyematan mewakili pencakupan atau kepemilikan. Dua elemen model yang terkait dengan cara ini juga dikenal sebagai induk dan anak. Anak tersebut dikatakan disematkan pada induknya.
Tautan yang disematkan tidak biasanya ditampilkan secara eksplisit sebagai konektor pada diagram. Sebaliknya, mereka biasanya diwakili oleh penahanan. Akar model diwakili oleh diagram, dan elemen yang disematkan di dalamnya ditampilkan sebagai bentuk pada diagram.
Dalam contoh, kelas induk Musik memiliki relasi penyematan MusicHasAlbums ke Album, yang memiliki relasi penyematan AlbumHasSongs ke Song. Lagu ditampilkan sebagai item dalam daftar di dalam setiap Album. Musik juga memiliki penghubung "MusicHasArtists" ke kelas Artis, yang instance-nya juga muncul sebagai bentuk pada diagram.
Secara default, elemen yang disematkan akan dihapus secara otomatis saat orang tua mereka dihapus.
Saat sebuah model disimpan ke dalam file dalam bentuk XML, unsur yang disematkan akan berada di dalam induknya, kecuali Anda telah melakukan kustomisasi terhadap proses serialisasinya.
Nota
Penyematan tidak sama dengan pewarisan. Anak-anak dalam hubungan penyematan tidak mewarisi atribut induk. Penyematan adalah jenis tautan antara elemen model. Pewarisan adalah hubungan antara kelas, dan tidak membuat tautan antar elemen model.
Aturan penyematan
Setiap elemen dalam model instansi harus menjadi target dari hanya satu tautan penyematan, kecuali akar model.
Oleh karena itu, setiap kelas domain non-abstrak, kecuali kelas akar, harus menjadi target setidaknya satu hubungan penyematan, atau harus mewarisi penyematan dari kelas dasar. Kelas dapat menjadi target dua penyematan atau lebih, tetapi elemen model instansnya hanya dapat memiliki satu induk pada satu waktu. Perkalian dari target ke sumber harus 0..1 atau 1..1.
Penjelajah Menampilkan Pohon Penyematan
Definisi DSL Anda juga membuat penjelajah, yang terlihat oleh pengguna di samping diagram model mereka.
Penjelajah menunjukkan semua elemen dalam model, bahkan elemen yang belum Anda tentukan bentuknya. Ini menunjukkan elemen dan hubungan penyematan, tetapi bukan hubungan referensi.
Untuk melihat nilai properti domain elemen, pengguna memilih elemen, baik dalam diagram model atau di penjelajah model, dan membuka jendela Properti. Ini menampilkan semua properti domain, termasuk properti yang tidak ditampilkan pada diagram. Dalam contoh, setiap Lagu memiliki Judul dan Genre, tetapi hanya nilai Judul yang ditampilkan pada diagram.
Hubungan Referensi
Hubungan referensi mewakili segala jenis hubungan yang bukan penanaman.
Hubungan referensi biasanya ditampilkan pada diagram sebagai konektor antar bentuk.
Dalam representasi XML model, tautan referensi antara dua elemen diwakili menggunakan moniker. Artinya, moniker adalah nama yang secara unik mengidentifikasi setiap elemen dalam model. Simpul XML untuk setiap elemen model berisi simpul yang menentukan nama hubungan dan moniker elemen lain.
Peranan
Setiap hubungan domain memiliki dua peran, peran sumber, dan peran target.
Dalam gambar berikut, garis antara kelas domain Publisher dan hubungan domain PublisherCatalog adalah peran sumber. Garis antara hubungan domain dan kelas domain Album adalah peran target.
Nama yang terkait dengan hubungan sangat penting ketika Anda menulis kode program yang melintasi model. Misalnya, saat Anda membangun solusi DSL, kelas Publisher yang dihasilkan memiliki properti Catalog sebagai kumpulan Album. Kelas Album memiliki properti Publisher yang merupakan instans tunggal dari kelas Publisher.
Saat Anda membuat hubungan dalam Definisi DSL, nama properti dan hubungan diberikan nilai default. Namun, Anda dapat mengubahnya.
Perkalian
Multiplicities menentukan berapa banyak elemen yang dapat memiliki peran yang sama dalam hubungan domain. Dalam contoh, pengaturan multiplikasi nol-ke-banyak (0..*) pada peran Katalog menentukan bahwa setiap instans kelas domain Publisher dapat memiliki tautan hubungan PublisherCatalog sebanyak yang ingin Anda berikan.
Konfigurasikan perkalian peran baik dengan mengetik pada diagram atau dengan memodifikasi Multiplicity properti di jendela Properti . Tabel berikut ini menjelaskan pengaturan untuk properti ini.
| Jenis perkalian | Description |
|---|---|
| 0..* (Nol ke banyak) | Setiap instans kelas domain dapat memiliki beberapa instans hubungan atau tidak ada instans hubungan. |
| 0..1 (Nol ke satu) | Setiap instans kelas domain dapat memiliki tidak lebih dari satu instans hubungan atau tidak ada instans hubungan. |
| 1..1 (Satu) | Setiap instans kelas domain dapat memiliki satu instans hubungan. Anda tidak dapat membuat lebih dari satu instans hubungan ini dari instans kelas peran apa pun. Jika validasi diaktifkan, kesalahan validasi akan muncul ketika setiap instans dari kelas peran tidak memiliki instans dari hubungan. |
| 1..* (Satu ke banyak) | Setiap instans kelas pada peran yang memiliki multiplikasi ini dapat memiliki beberapa instans hubungan, dan setiap instans harus memiliki setidaknya satu instans hubungan. Jika validasi diaktifkan, kesalahan validasi akan muncul ketika setiap instans kelas peran tidak memiliki satupun instans dari hubungan. |
Hubungan Domain sebagai Kelas
Tautan diwakili di Store sebagai instans LinkElement, yang merupakan kelas turunan ModelElement. Anda dapat menentukan properti ini dalam diagram model domain pada hubungan domain.
Anda juga dapat membuat hubungan sebagai sumber atau target hubungan lain. Dalam diagram model domain, klik kanan hubungan domain lalu klik Perlihatkan Sebagai Kelas. Kotak kelas tambahan akan muncul. Anda kemudian dapat menyambungkan hubungan ke dalamnya.
Anda dapat menentukan hubungan sebagian dengan pewarisan, sebagaimana halnya dengan kelas domain. Pilih hubungan turunan dan atur Hubungan Dasar di jendela Properti.
Hubungan turunan mengkhususkan hubungan dasarnya. Kelas domain yang ditautkannya harus berasal dari atau sama dengan kelas yang ditautkan oleh hubungan dasar. Ketika tautan hubungan turunan dibuat dalam model, itu merupakan contoh baik dari hubungan turunan maupun dasar. Dalam kode program, Anda dapat menavigasi ke ujung tautan yang berlawanan menggunakan properti yang dihasilkan baik oleh dasar atau oleh kelas turunan.