Bagikan melalui


Menentukan Bahasa Khusus Domain

Untuk menentukan bahasa khusus domain (DSL), Anda membuat solusi Visual Studio dari templat. Bagian utama dari solusi ini adalah diagram Definisi DSL, yang disimpan di DslDefinition.dsl. Definisi DSL mendefinisikan kelas dan bentuk DSL. Setelah memodifikasi dan menambahkan ke elemen-elemen ini, Anda dapat menambahkan kode program untuk mengkustomisasi DSL secara lebih rinci.

Jika Anda baru menggunakan DLL, kami sarankan Anda untuk menelusuri DSL Tools Lab, yang dapat Anda temukan di situs ini: Visualisasi dan Pemodelan SDK

Memilih Solusi Templat

Untuk mendefinisikan bahasa khusus domain, Anda harus menginstal komponen berikut:

  • Visual Studio
  • Beban kerja pengembangan ekstensi Visual Studio (termasuk SDK Visual Studio)
  • Pemodelan SDK (instal sebagai komponen individual dalam Visual Studio)

Catatan

Komponen Transformasi Template Teks secara otomatis diinstal sebagai bagian dari beban kerja pengembangan ekstensi Visual Studio. Anda juga dapat menginstalnya dari tab Komponen individual Alat Penginstal Visual Studio, di bawah kategori SDK, pustaka, dan kerangka kerja. Instal komponen SDK Pemodelan dari tab Komponen individual.

Untuk membuat bahasa khusus domain baru, Anda membuat solusi Visual Studio baru menggunakan templat proyek Bahasa Khusus Domain.

Untuk membuat solusi DSL

  1. Buat proyek Bahasa Khusus Domain baru.

    Wizard Bahasa Khusus Domain terbuka dan menampilkan daftar solusi DSL templat.

  2. Klik setiap templat untuk melihat deskripsi. Pilih solusi yang paling mirip dengan apa yang ingin Anda buat.

    Setiap templat DSL mendefinisikan DSL dasar yang berfungsi. Anda akan mengedit DSL ini agar sesuai dengan kebutuhan Anda sendiri.

    Klik setiap sampel untuk informasi selengkapnya.

    • Pilih Alur Tugas untuk membuat DSL yang memiliki swimlane. Swimlane adalah partisi vertikal atau horizontal suatu diagram.

    • Pilih Model Komponen untuk membuat DSL yang memiliki port. Port adalah bentuk kecil di bagian tepi bentuk yang lebih besar.

    • Pilih Diagram Kelas untuk menentukan DSL yang memiliki bentuk kompartemen. Bentuk kompartemen berisi sejumlah item.

    • Pilih Bahasa Minimal dalam kasus lain, atau jika Anda tidak yakin.

    • Pilih Perancang WinForm Minimal atau Perancang WPF Minimal untuk membuat DSL yang ditampilkan pada permukaan Formulir Windows atau WPF. Anda harus menulis kode untuk menentukan editor. Untuk mengetahui informasi selengkapnya, lihat topik berikut:

      Membuat Bahasa Khusus Domain Berbasis Formulir Windows

      Membuat Bahasa Khusus Domain Berbasis WPF

  3. Masukkan ekstensi nama file untuk bahasa khusus domain Anda di halaman wizard yang sesuai. Ini adalah ekstensi yang akan digunakan file yang berisi instans DSL Anda.

    • Pilih ekstensi nama file yang tidak terkait dengan aplikasi apa pun di komputer Anda, atau di komputer mana pun tempat Anda ingin menginstal DSL. Misalnya, docx dan htm akan menjadi ekstensi nama file yang tidak dapat diterima.

    • Wizard akan memperingatkan Anda jika ekstensi yang telah Anda masukkan sedang digunakan sebagai bahasa khusus domain. Pertimbangkan untuk menggunakan ekstensi nama file yang berbeda. Anda juga dapat mereset instans eksperimental SDK Visual Studio untuk menghapus perancang eksperimental lama. Di menu Mulai Windows, ketik reset Visual Studio, lalu jalankan perintah Reset Instans Eksperimental Microsoft Visual Studio yang cocok dengan versi Visual Studio Anda.

  4. Anda dapat menyesuaikan pengaturan di halaman lain, atau membiarkan nilai default.

  5. Klik Selesai.

    Wizard membuat solusi yang berisi dua atau tiga proyek, dan menghasilkan kode dari definisi DSL.

    Antarmuka pengguna sekarang menyerupai gambar berikut.

    perancang dsl

    Solusi ini mendefinisikan bahasa khusus domain. Untuk informasi selengkapnya, lihat Gambaran Umum Antarmuka Pengguna Alat Bahasa Khusus Domain.

Menguji Solusi

Solusi templat menyediakan DSL yang berfungsi, yang dapat Anda modifikasi atau gunakan apa adanya.

Untuk menguji solusi, tekan F5 atau CTRL+F5. Instans baru Visual Studio terbuka dalam mode eksperimental.

Dalam instans baru Visual Studio, di Penjelajah Solusi, buka file Sampel. File ini terbuka sebagai diagram, dengan kotak alat.

Jika Anda menjalankan solusi yang telah Anda buat dari templat Bahasa Minimal, Visual Studio eksperimental Anda akan menyerupai contoh berikut:

Pohon sampel bahasa khusus domain di Visual Studio

Bereksperimen dengan alat. Buat elemen dan sambungkan.

Tutup instans eksperimental Visual Studio.

Catatan

Ketika Anda telah memodifikasi DSL, Anda tidak akan lagi dapat melihat bentuk pada file uji Sampel. Namun, Anda akan dapat membuat elemen baru.

Memodifikasi DSL templat

Ganti nama dan simpan beberapa atau semua kelas domain dan kelas bentuk dalam definisi DSL templat. Nama kelas baru Anda harus berupa nama CLR yang valid, tanpa spasi atau tanda baca.

Sangat berguna untuk menyimpan kelas-kelas ini:

  • Kelas akar muncul di kiri atas diagram Definisi DSL, pada Kelas dan Hubungan. Ganti nama menjadi nama yang berbeda dari DSL. Misalnya, DSL bernama MusicLibrary mungkin memiliki kelas akar bernama Musik.

  • Kelas diagram muncul di kanan bawah diagram Definisi DSL, di kolom Elemen Diagram. Anda mungkin harus menggulir ke kanan untuk melihatnya. Biasanya diberi nama DiagramYourDsl.

  • Jika Anda menggunakan templat Alur Tugas dan ingin membuat diagram dengan swimlane, simpan dan ganti nama kelas domain Actor dan bentuk ActorSwimlane.

    Hapus atau ganti nama kelas lainnya agar sesuai dengan kebutuhan Anda.

Pola untuk Menentukan DSL

Kami menyarankan agar Anda mengembangkan DSL dengan menambahkan atau menyesuaikan satu atau dua fitur pada satu waktu. Tambahkan fitur, jalankan dan uji DSL, kemudian tambahkan satu atau dua fitur lagi. Fitur umum DSL Anda dapat berupa:

  • Kelas domain, hubungan penyematan yang menyambungkan elemen ke model, bentuk yang diperlukan untuk menampilkan elemen kelas tersebut pada diagram, dan alat elemen yang memungkinkan pengguna membuat elemen.

  • Properti domain kelas domain dan dekorator yang menampilkannya pada bentuk.

  • Hubungan referensi dan konektor yang menampilkannya pada diagram dan alat konektor yang memungkinkan pengguna membuat tautan.

  • Kustomisasi yang memerlukan kode program, seperti batasan validasi atau perintah menu.

    Bagian berikut menjelaskan cara membangun jenis fitur DSL yang paling berguna. Ada banyak pola lain di mana DSL dapat dibangun, tetapi ini adalah yang paling sering digunakan.

Catatan

Setelah menambahkan fitur, jangan lupa untuk mengeklik Ubah Semua Templat di toolbar Penjelajah Solusi sebelum Anda membangun dan menjalankan DSL Anda.

Gambar berikut menunjukkan bagian kelas dan hubungan dari DSL yang digunakan sebagai contoh dalam topik ini.

Hubungan Penyematan dan Referensi

Gambar berikutnya adalah contoh model DSL ini:

Model instans DSL yang dihasilkan

Catatan

"Model" mengacu pada instans DSL yang dibuat pengguna, dan biasanya ditampilkan sebagai diagram. Topik ini membahas diagram Definisi DSL sekaligus diagram model yang muncul saat DSL Anda digunakan.

Menentukan Kelas Domain

Kelas Domain mewakili konsep DSL Anda. Instans adalah elemen model. Misalnya dalam DSL MusicLibrary, Anda mungkin memiliki Kelas Domain bernama Album dan Lagu.

Untuk membuat kelas domain, Anda dapat menyeret dari alat Kelas Domain Bernama ke diagram, kemudian mengganti nama kelas.

Untuk informasi selengkapnya, lihat Properti Kelas Domain.

Membuat Hubungan Penyematan untuk setiap Kelas Domain

Setiap kelas domain kecuali kelas akar harus menjadi target setidaknya satu hubungan penyematan, atau harus mewarisi dari kelas yang merupakan target hubungan penyematan.

Dalam model, setiap elemen model adalah node dalam satu pohon hubungan penyematan. Sumber dan target hubungan penyematan sering disebut sebagai induk dan elemen turunan.

Pemilihan induk untuk kelas domain tergantung pada bagaimana Anda menginginkan masa hidup elemen bergantung pada elemen lain. Jika node pohon dihapus, sub-pohonnya biasanya juga dihapus. Oleh karena itu, kelas elemen yang memiliki keberadaan independen disematkan langsung di bawah kelas akar.

Biasanya, jika Anda menampilkan elemen di dalam elemen lain, Anda ingin menunjukkan hubungan pemilik. Dalam hal ini, kelas induk yang paling tepat adalah kelas kontainer. Pengecualiannya adalah ketika item yang Anda lihat di dalam kontainer sebenarnya hanyalah tautan referensi ke elemen independen. Dalam hal ini, menghapus kontainer akan menghapus referensi tetapi bukan targetnya.

Dalam pola definisi DSL yang dijelaskan dalam topik ini, kami akan berasumsi bahwa elemen yang ditampilkan di dalam kontainer akan dihapus ketika kontainer dihapus. Skema yang lebih kompleks dimungkinkan, dan dapat dicapai dengan menentukan aturan.

Bagaimana elemen ditampilkan Kelas induk (penyematan) Contoh dalam Templat Solusi DSL
Bentuk pada diagram.

Swimlane.
Kelas akar DSL. Bahasa Minimal.

Alur Tugas: Kelas aktor.
Bentuk dalam swimlane. Kelas domain elemen yang ditampilkan sebagai swimlane. Alur Tugas: Kelas tugas.
Item dalam daftar pada bentuk, di mana item dihapus jika kontainer dihapus.

Port di tepi bentuk.
Kelas domain yang dipetakan ke bentuk kontainer. Diagram kelas: Kelas atribut.

Diagram komponen: Kelas port.
Item dalam daftar, tidak dihapus jika kontainer dihapus. Kelas akar DSL.

Daftar tersebut menampilkan tautan referensi.
Tidak ditampilkan secara langsung. Kelas yang membentuk bagian.

Dalam contoh Pustaka Musik, Album ditampilkan sebagai persegi panjang tempat judul Lagu dicantumkan. Oleh karena itu, induk Album adalah kelas dasar Musik, dan induk Lagu adalah Album.

Untuk membuat kelas domain dan penyematannya secara bersamaan, klik alat Hubungan Penyematan, kemudian klik kelas induk, kemudian klik bagian kosong diagram.

Biasanya tidak perlu menyesuaikan nama hubungan penyematan beserta perannya, karena mereka akan melacak nama kelas secara otomatis.

Untuk informasi selengkapnya, lihat Properti Hubungan Domain dan Properti Peran Domain.

Catatan

Penyematan tidak sama dengan warisan. Elemen turunan dalam hubungan penyematan tidak mewarisi fitur dari induk mereka.

Menambahkan Properti Domain ke setiap Kelas Domain

Properti domain menyimpan nilai. Contohnya adalah: Nama, Judul, Tanggal Publikasi.

Klik Properti Domain di kelas tersebut, tekan tombol ENTER, kemudian ketik nama properti. Jenis default properti domain adalah String. Jika Anda ingin mengubah jenisnya, pilih properti domain, dan atur Jenis di jendela Properti. Jika jenis yang Anda inginkan tidak ada di daftar drop-down, lihat Menambahkan Jenis Properti.

Atur properti Nama Elemen. Pilih properti domain yang dapat digunakan untuk mengidentifikasi elemen di penjelajah bahasa. Misalnya, di kelas domain Lagu tempat Anda dapat memilih properti domain Judul. Di jendela Properti, atur Is Element Name ke true.

Membuat Kelas Domain Turunan

Jika Anda ingin kelas domain memiliki varian yang mewarisi properti dan hubungannya, buat kelas yang berasal dari kelas domain tersebut. Misalnya, Album mungkin memiliki kelas turunan WMA dan MP3.

Buat kelas turunan menggunakan alat Kelas Domain.

Klik alat Warisan, klik kelas turunan, kemudian klik kelas dasar.

Pertimbangkan untuk mengatur Pengubah Warisan dari kelas dasar ke abstrak. Jika Anda berpikir bahwa Anda mungkin memerlukan instans kelas dasar, pertimbangkan untuk membuat kelas turunan terpisah untuk mereka sebagai gantinya.

Kelas turunan mewarisi properti dan peran kelas dasar mereka.

Merapikan Diagram Definisi DSL

Saat Anda menambahkan hubungan, beberapa kelas Anda akan muncul di lebih dari satu tempat. Untuk mengurangi jumlah tampilan dan melebarkan diagram, klik kanan kelas target hubungan, kemudian klik Bawa Pohon Ke Sini. Untuk efek yang berlawanan, klik kanan kelas target hubungan dan klik Pisahkan Pohon. Jika Anda tidak melihat perintah menu ini, pastikan hanya kelas domain yang dipilih.

Gunakan CTRL+Up dan CTRL+Down untuk memindahkan kelas domain dan kelas bentuk.

Menguji kelas domain

Untuk menguji Kelas Domain baru
  1. Klik Transformasi Semua Templat di toolbar Penjelajah Solusi untuk menghasilkan kode perancang DSL. Anda dapat mengotomatiskan langkah ini. Untuk informasi selengkapnya, lihat Cara Mengotomatiskan Transformasikan Semua Templat.

  2. Bangun dan jalankan DSL. Tekan F5 atau CTRL+F5 untuk menjalankan instans baru Visual Studio dalam mode eksperimental. Dalam instans eksperimental Visual Studio, buka atau buat file yang memiliki ekstensi nama file DSL Anda.

  3. Buka penjelajah. Di sisi diagram terdapat jendela penjelajah bahasa, yang biasanya bernama YourLanguage Explorer. Jika Anda tidak melihat jendela ini, jendela tersebut mungkin berada di tab di bawah Penjelajah Solusi. Jika Anda tidak dapat menemukannya, pada menu Tampilan , arahkan ke Windows Lain, lalu klik YourLanguage Explorer.

    Penjelajah Anda menyajikan tampilan pohon model tersebut.

  4. Buat elemen baru. Klik kanan node akar di bagian atas, kemudian klik TambahkanYourClass Baru.

    Instans baru kelas Anda muncul di Penjelajah bahasa Anda.

  5. Verifikasi bahwa setiap instans memiliki nama yang berbeda saat Anda membuat instans baru. Ini hanya akan terjadi jika Anda telah mengatur bendera Is Element Name pada properti domain.

  6. Periksa properti domain. Dengan instans kelas Anda dipilih, periksa jendela Properti. Jendela ini akan menampilkan properti domain yang Anda tentukan di kelas domain ini.

  7. Simpan file, tutup, dan buka kembali. Semua instans yang Anda buat harus terlihat di penjelajah, setelah Anda memperluas node.

Menentukan Bentuk pada Diagram

Anda dapat menentukan kelas elemen yang muncul pada diagram sebagai persegi panjang, elipsis, atau ikon.

Untuk menentukan kelas elemen yang muncul sebagai bentuk pada diagram

  1. Tentukan dan uji kelas domain seperti yang dijelaskan dalam Menentukan Kelas Domain .

    • Induk kelas harus menjadi kelas dasar. Artinya, harus ada hubungan penyematan antara kelas dasar dan kelas domain baru.

    • Jika diagram Anda memiliki swimlane, induk dapat menjadi kelas domain yang dipetakan ke swimlane. Sebelum melanjutkan prosedur ini, lihat Menentukan DSL yang memiliki Swimlane.

  2. Tambahkan kelas bentuk untuk mewakili elemen pada diagram model. Seret dari salah satu alat berikut ke diagram Definisi DSL:

    • Bentuk Geometri menyediakan persegi panjang atau elips.

    • Bentuk Gambar menampilkan gambar yang Anda sediakan.

    • Bentuk Kompartemen adalah persegi panjang yang berisi satu atau beberapa daftar item.

      Ganti nama kelas bentuk, yang akan muncul di sisi kanan diagram Definisi DSL, di bawah Bentuk dan Konektor.

  3. Tentukan gambar, jika Anda membuat bentuk gambar.

    1. Buat file gambar dengan ukuran apa pun. Format BMP, JPEG, GIF, dan EMF didukung.

    2. Di Penjelajah Solusi, tambahkan file ke solusi pada Dsl\Resources.

    3. Kembali ke diagram Definisi DSL dan pilih kelas bentuk gambar yang baru.

    4. Di jendela Properti, klik properti Gambar.

    5. Dalam kotak dialog Pilih Gambar, klik menu drop-down di bawah Nama file, dan pilih gambar.

  4. Tambahkan dekorator teks ke bentuk untuk menampilkan properti domain.

    Untuk menampilkan nama atau judul elemen model, Anda mungkin memerlukan setidaknya satu dekorator teks.

    Klik kanan header kelas bentuk, arahkan ke Tambahkan, kemudian klik Dekorator Teks. Atur nama dekorator, dan di jendela Properti, atur Posisinya.

  5. Sambungkan setiap bentuk dengan Peta Elemen Diagram ke kelas domain yang harus ditampilkan.

    Klik alat Peta Elemen Diagram, kemudian klik kelas domain, kemudian klik kelas bentuk.

  6. Petakan properti ke dekorator teks.

    1. Pilih garis abu-abu antara kelas domain dan kelas bentuk yang mewakili peta elemen diagram.

    2. Di jendela Detail DSL, klik tab Peta Dekorator. Jika Anda tidak melihat jendela Detail DSL, pada menu Tampilan, arahkan ke Jendela Lain, kemudian klik Detail DSL. Sering kali perlu untuk menaikkan bagian atas jendela ini untuk melihat semua kontennya.

    3. Pilih nama dekorator. Pada Tampilkan properti, pilih nama properti kelas domain. Ulangi langkah ini untuk setiap dekorator.

      Jika Anda ingin menampilkan properti elemen terkait, klik navigator pohon drop-down pada properti Jalur untuk ditampilkan.

    4. Pastikan tanda centang muncul di samping setiap nama dekorator.

      Jendela Pemetaan Bentuk dan Detail DSL

  7. Buat item kotak alat untuk membuat elemen kelas domain.

    1. Di Penjelajah DSL, perluas node Editor dan semua sub-simpulnya.

    2. Klik kanan node pada Tab Kotak Alat yang memiliki nama yang sama dengan DSL Anda, misalnya MusicLibrary. Klik Tambahkan Alat Elemen.

      Catatan

      Jika Anda mengeklik kanan node Alat, Anda tidak akan melihat Tambahkan Alat Elemen. Sebagai gantinya, klik node di atasnya.

    3. Di jendela Properti, dengan alat elemen baru dipilih, atur Kelas ke kelas domain yang baru saja Anda tambahkan.

    4. Atur Keterangan dan Tooltip.

    5. Atur Ikon Kotak Alat ke ikon yang akan muncul di kotak alat. Anda dapat mengaturnya ke ikon baru atau ikon yang sudah digunakan untuk alat lain.

      Untuk membuat ikon baru, buka Dsl\Resources di Penjelajah Solusi. Salin dan tempel salah satu file BMP alat elemen yang ada. Ganti nama salinan yang ditempelkan, kemudian klik dua kali untuk mengeditnya.

      Kembali ke diagram Definisi DSL, pilih alat, dan di jendela Properti klik [...] di Ikon Kotak Alat. Dalam kotak dialog Pilih Bitmap, pilih file .BMP Anda dari menu drop-down.

    Untuk informasi selengkapnya, lihat Properti Bentuk Geometri dan Properti Bentuk Gambar.

Untuk Menguji Bentuk

  1. Klik Transformasi Semua Templat di toolbar Penjelajah Solusi untuk menghasilkan kode perancang DSL.

  2. Bangun dan jalankan DSL. Tekan F5 atau CTRL+F5 untuk menjalankan instans baru Visual Studio dalam mode eksperimental. Dalam instans eksperimental Visual Studio, buka atau buat file yang memiliki ekstensi nama file DSL Anda.

  3. Verifikasi bahwa alat elemen muncul di kotak alat.

  4. Buat bentuk dengan menyeret dari alat ke diagram model.

  5. Verifikasi bahwa setiap dekorator teks muncul, dan bahwa:

    1. Anda dapat mengeditnya, kecuali Anda telah mengatur bendera Is UI Read Only pada properti domain.

    2. Saat Anda mengedit properti baik di jendela Properti atau di dekorator, tampilan lainnya diperbarui.

    Setelah pertama kali menguji bentuk, Anda mungkin ingin menyesuaikan beberapa propertinya dan menambahkan beberapa fitur yang lebih canggih. Untuk informasi selengkapnya, lihat Mengkustomisasi dan Memperluas Bahasa Khusus Domain.

Menentukan Hubungan Referensi

Anda dapat menentukan hubungan referensi antara kelas domain sumber apa pun dan kelas domain target apa pun. Hubungan referensi biasanya ditampilkan pada diagram sebagai konektor, yang merupakan garis di antara bentuk.

Misalnya, jika Album dan Artis musik ditampilkan sebagai bentuk pada diagram, Anda dapat menentukan hubungan bernama ArtistsAppearedOnAlbums yang menautkan Artis dengan Album tempat mereka bekerja. Lihat contoh dalam gambar.

Model instans DSL yang dihasilkan

Hubungan referensi juga dapat menautkan elemen dari jenis yang sama. Misalnya, dalam DSL yang mewakili pohon keluarga, hubungan antara induk dan elemen turunan mereka adalah hubungan referensi dari Orang ke Orang.

Menentukan Hubungan Referensi

Klik alat Hubungan Referensi, kemudian klik kelas domain sumber hubungan, kemudian klik kelas domain target. Kelas target dapat sama dengan kelas sumber.

Setiap hubungan memiliki dua peran, yang diwakili oleh garis di setiap sisi kotak hubungan. Anda dapat memilih setiap peran dan mengatur propertinya di jendela Properti.

Pertimbangkan untuk mengganti nama peran. Misalnya, dalam hubungan antara Orang dan Orang, Anda mungkin ingin mengubah nama default menjadi Induk dan Elemen Turunan, Manajer dan Bawahan, Guru dan Siswa, dan sebagainya.

Sesuaikan kardinalitas setiap peran, jika perlu. Jika Anda ingin setiap Orang memiliki paling banyak satu Manajer, atur kardinalitas yang muncul di bawah label Manajer pada diagram menjadi 0..1.

Tambahkan properti domain ke hubungan. Dalam gambar, hubungan Artist-Album memiliki properti peran.

Atur properti Izinkan Duplikat dari hubungan, jika lebih dari satu link dari kelas yang sama dapat berada di antara pasangan elemen model yang sama. Misalnya, Anda dapat mengizinkan Guru untuk mengajar lebih dari satu Subjek kepada Siswa yang sama.

Peta bentuk untuk konektor

Untuk informasi selengkapnya, lihat Properti Hubungan Domain dan Properti Peran Domain.

Tentukan Konektor untuk Menampilkan Hubungan

Konektor menampilkan garis di antara dua bentuk pada diagram model.

Seret alat Konektor ke diagram definisi DSL.

Tambahkan dekorator teks jika Anda ingin menampilkan label pada konektor. Atur posisi mereka. Untuk membiarkan pengguna memindahkan dekorator teks, atur properti Is Moveable.

Gunakan alat Peta Elemen Diagram untuk menautkan konektor ke hubungan referensi.

Dengan peta elemen diagram dipilih, buka jendela Detail DSL, dan buka tab Peta Dekorator.

Pilih setiap Dekorator dan atur properti Tampilan ke properti domain yang benar.

Pastikan tanda centang muncul di samping setiap item di daftar Dekorator.

Menentukan Alat Penyusun Koneksi

Di jendela Penjelajah DSL, perluas node Editor dan semua subnodenya.

Klik kanan node yang memiliki nama yang sama dengan DSL Anda, kemudian klik Tambahkan Alat Koneksi Baru.

Saat alat baru dipilih, di jendela Properti:

  • Atur Keterangan dan Tooltip.

  • Klik Penyusun Koneksi dan pilih penyusun yang sesuai untuk hubungan baru.

  • Atur Ikon Kotak Alat ke ikon yang ingin Anda munculkan di kotak alat. Anda dapat mengaturnya ke ikon baru atau ikon yang sudah digunakan untuk alat lain.

    Untuk membuat ikon baru, buka Dsl\Resources di Penjelajah Solusi. Salin dan tempel salah satu file BMP alat elemen yang ada. Ganti nama salinan yang ditempelkan, kemudian klik dua kali untuk mengeditnya.

    Kembali ke diagram Definisi DSL, pilih alat, dan di jendela Properti klik [...] di Ikon Kotak Alat. Dalam kotak dialog Pilih Bitmap, pilih file .BMP Anda dari menu drop-down.

Untuk Menguji Hubungan Referensi dan Konektor
  1. Klik Transformasi Semua Templat di toolbar Penjelajah Solusi untuk menghasilkan kode perancang DSL.

  2. Bangun dan jalankan DSL. Tekan F5 atau CTRL+F5 untuk menjalankan instans baru Visual Studio dalam mode eksperimental. Dalam instans eksperimental Visual Studio, buka atau buat file yang memiliki ekstensi nama file DSL Anda.

  3. Verifikasi bahwa alat koneksi muncul di kotak alat.

  4. Buat bentuk dengan menyeret dari alat ke diagram model.

  5. Buat koneksi di antara bentuk. Klik alat konektor, klik bentuk, kemudian klik bentuk lain.

  6. Verifikasi bahwa Anda tidak dapat membuat koneksi antara kelas yang tidak sesuai. Misalnya, jika hubungan Anda adalah antara Album dan Artis, verifikasi bahwa Anda tidak dapat menautkan Artis ke Artis.

  7. Verifikasi bahwa kardinalitas benar. Misalnya, verifikasi bahwa Anda tidak dapat menyambungkan Orang ke lebih dari satu manajer.

  8. Verifikasi bahwa setiap dekorator teks muncul, dan bahwa:

    1. Anda dapat mengeditnya, kecuali Anda telah mengatur bendera Is UI Read Only pada properti domain.

    2. Saat Anda mengedit properti baik di jendela Properti atau di dekorator, tampilan lainnya diperbarui.

    Setelah pertama kali menguji konektor, Anda mungkin ingin menyesuaikan beberapa propertinya dan menambahkan beberapa fitur yang lebih canggih. Untuk informasi selengkapnya, lihat Mengkustomisasi dan Memperluas Bahasa Khusus Domain.

Menentukan Bentuk yang Berisi Daftar: Bentuk Kompartemen

Bentuk kompartemen berisi satu atau lebih daftar item. Misalnya, di DSL Pustaka Musik, Anda dapat menggunakan bentuk kompartemen untuk mewakili Album musik. Di setiap Album, terdapat daftar Lagu.

Bentuk Kompartemen

Dalam metode paling sederhana untuk mencapai efek ini dalam definisi DSL, Anda menentukan satu kelas domain untuk kontainer, dan satu kelas domain untuk setiap daftar. Kelas kontainer dipetakan ke bentuk kompartemen.

Peta bentuk

Untuk informasi selengkapnya, lihat Properti Bentuk Kompartemen.

Untuk menentukan Bentuk Kompartemen

  1. Buat kelas domain kontainer. Klik alat Hubungan Penyematan, klik kelas dasar model, kemudian klik bagian kosong dari diagram definisi DSL. Ini membuat kelas domain yang diberi nama Album dalam gambar contoh.

    Atau, alih-alih menyematkan di kelas dasar, Anda dapat menyematkan kontainer di kelas domain yang dipetakan ke swimlane.

    Tambahkan properti domain seperti Nama ke kelas, dan atur bendera Is Element Name di jendela Properti.

  2. Buat kelas domain item daftar. Klik alat Hubungan Penyematan, klik kelas kontainer (Album), kemudian klik bagian kosong diagram. Ini membuat kelas domain yang diberi nama Lagu dalam gambar contoh.

    Tambahkan properti domain seperti Judul ke kelas, dan atur bendera Is Element Name.

    Tambahkan properti domain lainnya.

    Tambahkan kelas domain item daftar lain untuk setiap daftar yang ingin Anda tampilkan.

  3. Untuk mencampur beberapa jenis item dalam daftar, buat kelas yang mewarisi dari kelas daftar. Buat kelas daftar abstrak dengan mengatur Pengubah Warisannya.

    Misalnya, jika Anda ingin musik klasik diurutkan berdasarkan komposer alih-alih artis, Anda dapat membuat dua subkelas Lagu, ClassicalSong dan NonClassicalSong.

  4. Buat bentuk kompartemen. Seret dari alat Bentuk Kompartemen ke diagram definisi DSL.

    Tambahkan dekorator teks dan atur namanya.

    Tambahkan kompartemen dan atur namanya.

  5. Untuk membiarkan pengguna menyembunyikan kompartemen daftar, klik kanan kelas bentuk kompartemen, arahkan ke Tambahkan, kemudian klik Perluas/Ciutkan Dekorator. Di jendela Properti, atur posisi dekorator.

  6. Klik alat Peta Elemen Diagram, klik kelas domain kontainer, kemudian klik bentuk kompartemen.

  7. Pilih tautan peta elemen diagram antara kelas domain dan bentuk. Di jendela Detail DSL:

    1. Klik tab Dekorator. Klik nama dekorator, kemudian pilih item yang sesuai pada Properti Tampilan. Pastikan tanda centang muncul di samping nama dekorator.

    2. Klik tab Peta Kompartemen.

      Klik nama kompartemen.

      Pada Jalur koleksi elemen yang ditampilkan, navigasikan ke kelas elemen daftar (Lagu). Klik panah drop-down untuk menggunakan alat navigator.

      Pada Properti Tampilan, pilih properti yang harus ditampilkan dalam daftar. Dalam contoh, ini adalah Judul.

Catatan

Dengan menggunakan bidang Jalur di bidang Peta Dekorator dan peta Kompartemen, Anda dapat membuat hubungan yang lebih kompleks antara kelas domain dan bentuk kompartemen.

Untuk menentukan alat untuk membuat bentuk

  1. Buat item kotak alat untuk membuat elemen kelas domain.

  2. Di Penjelajah DSL, perluas node Editor dan semua sub-simpulnya.

  3. Klik kanan node pada Tab Kotak Alat yang memiliki nama yang sama dengan DSL Anda, misalnya MusicLibrary. Klik Tambahkan Alat Elemen.

    Catatan

    Jika Anda mengeklik kanan node Alat, Anda tidak akan melihat Tambahkan Alat Elemen. Sebagai gantinya, klik node di atasnya.

  4. Di jendela Properti, dengan alat elemen baru dipilih, atur Kelas ke kelas domain yang baru saja Anda tambahkan.

  5. Atur Keterangan dan Tooltip.

  6. Atur Ikon Kotak Alat ke ikon yang akan muncul di kotak alat. Anda dapat mengaturnya ke ikon baru atau ikon yang sudah digunakan untuk alat lain.

    Untuk membuat ikon baru, buka Dsl\Resources di Penjelajah Solusi. Salin dan tempel salah satu file .BMP alat elemen yang ada. Ganti nama salinan yang ditempelkan, kemudian klik dua kali untuk mengeditnya.

    Kembali ke diagram Definisi DSL, pilih alat, dan di jendela Properti klik [...] di Ikon Kotak Alat. Dalam kotak dialog Pilih Bitmap, pilih file BMP Anda dari menu drop-down.

Untuk menguji bentuk kompartemen

  1. Klik Transformasi Semua Templat di toolbar Penjelajah Solusi untuk menghasilkan kode perancang DSL.

  2. Bangun dan jalankan DSL. Tekan F5 atau CTRL+F5 untuk menjalankan instans baru Visual Studio dalam mode eksperimental. Dalam instans eksperimental Visual Studio, buka atau buat file yang memiliki ekstensi nama file DSL Anda.

  3. Verifikasi bahwa alat muncul di kotak alat.

  4. Seret alat tersebut ke diagram model. Bentuk dibuat.

    Verifikasi bahwa nama elemen muncul dan diatur secara otomatis ke nilai default.

  5. Klik kanan header bentuk baru, kemudian klik Tambahkan Item Daftar Anda. Dalam contoh, perintahnya adalah Tambahkan Lagu.

    Verifikasi bahwa item muncul dalam daftar dan memiliki nama baru.

  6. Klik salah satu item daftar, kemudian periksa jendela Properti. Anda akan melihat properti item daftar.

  7. Buka Penjelajah bahasa. Verifikasi bahwa Anda dapat melihat node kontainer dengan node item daftar di dalamnya.

    Penjelajah DSL yang dihasilkan

    Setelah pertama kali menguji bentuk kompartemen, Anda mungkin ingin menyesuaikan beberapa propertinya dan menambahkan beberapa fitur yang lebih canggih. Untuk informasi selengkapnya, lihat Mengkustomisasi dan Memperluas Bahasa Khusus Domain.

Biasanya, elemen yang Anda tampilkan dalam kompartemen adalah elemen turunan dari elemen yang diwakili oleh bentuk kompartemen. Namun terkadang, Anda ingin menampilkan elemen yang ditautkan ke elemen tersebut dengan hubungan referensi.

Misalnya, kita dapat menambahkan kompartemen kedua ke AlbumShape yang menampilkan daftar Artis yang ditautkan ke Album.

Dalam hal ini, kompartemen harus menampilkan tautan alih-alih elemen yang direferensikan. Ini karena ketika pengguna memilih item di kompartemen dan menekan DELETE, Anda ingin tautan dihapus, bukan elemen yang dirujuk.

Namun demikian, Anda dapat membuat nama elemen yang direferensikan muncul di kompartemen.

Prosedur berikut mengasumsikan bahwa Anda telah membuat kelas domain, hubungan referensi, bentuk kompartemen, dan peta elemen diagram, seperti yang dijelaskan sebelumnya di bagian ini.

  1. Tambahkan kompartemen ke bentuk kompartemen. Pada diagram Definisi DSL, klik kanan kelas bentuk kompartemen, arahkan ke Tambahkan, kemudian klik Kompartemen.

  2. Atur Jalur koleksi elemen yang ditampilkan untuk menavigasi ke link tersebut alih-alih elemen targetnya. Klik menu drop-down dan gunakan tampilan pohon untuk memilih hubungan referensi alih-alih targetnya. Dalam contoh, hubungannya adalah ArtistAppearedOnAlbums.

  3. Atur Jalur ke Properti Tampilan untuk menavigasi dari link ke elemen target. Dalam contoh, ini adalah Artis.

  4. Atur Properti Tampilan ke properti elemen target yang sesuai, misalnya Nama.

  5. Ubah Semua Templat, bangun dan jalankan DSL, dan buka model pengujian.

  6. Dalam diagram model, buat kelas bentuk yang sesuai, atur namanya, dan buat link di antara bentuk-bentuk tersebut. Dalam bentuk kompartemen, nama elemen yang ditautkan akan muncul.

  7. Pilih link atau item di dalam bentuk kompartemen. Baik link maupun item akan hilang.

Mendefinisikan Port pada Batas Bentuk lain

Port adalah bentuk yang terletak di batas bentuk lain.

Port juga dapat digunakan untuk menyediakan titik koneksi tetap pada bentuk lain, tempat pengguna dapat menarik konektor. Dalam hal ini, Anda dapat membuat bentuk port transparan.

Untuk melihat contoh yang menggunakan port, pilih templat Diagram Komponen saat Anda membuat solusi DSL baru. Contoh ini menunjukkan poin utama yang dapat Anda pertimbangkan saat menentukan port:

  • Terdapat kelas domain yang mewakili kontainer port, Component.

  • Terdapat kelas domain yang mewakili port. Dalam contoh, ini adalah ComponentPort.

  • Terdapat hubungan penyematan dari kelas domain kontainer ke kelas domain port. Untuk informasi selengkapnya, lihat Menentukan Kelas Domain.

  • Jika Anda ingin berbagai jenis port dicampur pada kontainer yang sama, Anda dapat membuat subkelas kelas domain port. Dalam contoh, InPort dan OutPort mewarisi dari ComponentPort.

  • Kelas domain kontainer dapat dipetakan ke segala jenis bentuk. Dalam contoh, ini adalah ComponentShape. Untuk informasi selengkapnya, lihat Menentukan Bentuk.

  • Kelas domain port dipetakan ke bentuk port. Anda dapat memetakan kelas turunan untuk memisahkan kelas bentuk port, atau memetakan kelas dasar ke satu kelas bentuk port.

    Di sisi lain, bentuk port bertindak seperti yang dijelaskan dalam Menentukan Bentuk.

    Untuk informasi selengkapnya, lihat Properti Bentuk Port.

Menentukan DSL yang memiliki Swimlane

Swimlane adalah partisi horizontal atau vertikal suatu diagram. Setiap swimlane sesuai dengan elemen model. Definisi DSL Anda memerlukan satu kelas domain untuk elemen swimlane.

Cara terbaik untuk membuat DSL dengan swimlane adalah dengan membuat solusi DSL baru dan memilih templat solusi Alur Tugas. Dalam Definisi DSL, kelas Aktor adalah kelas domain yang dipetakan ke swimlane. Ganti nama ini dan kelas lain agar sesuai dengan proyek Anda.

Untuk menambahkan kelas yang akan ditampilkan sebagai bentuk di dalam swimlane, buat Hubungan Penyematan antara kelas swimlane dan kelas baru Anda. Pengguna akan dapat menyeret elemen dari satu swimlane ke swimlane lainnya, tetapi setiap elemen akan selalu berada di dalam swimlane tertentu. Dalam templat solusi Alur Tugas, FlowElement adalah elemen turunan dari kelas swimlane.

Untuk menambahkan kelas yang akan ditampilkan sebagai bentuk secara independen dari swimlane, buat Hubungan Penyematan antara kelas dasar dan kelas baru Anda. Pengguna akan dapat menempatkan bentuk-bentuk ini di mana saja pada diagram, termasuk di seluruh batas swimlane dan di luar swimlane. Dalam templat solusi Alur Tugas, Komentar adalah elemen turunan dari kelas dasar.

Untuk informasi selengkapnya, lihat Properti Swimlane.

Menambahkan Jenis Properti

Enumerasi dan Harfiah Domain

Enumerasi domain adalah jenis dengan beberapa nilai harfiah.

Untuk menambahkan enumerasi domain, klik kanan akar model di Penjelajah DSL, kemudian klik Tambahkan Enumerasi Domain Baru. Elemen akan muncul di Penjelajah DSL pada node Jenis Domain. Elemen ini tidak muncul pada diagram.

Untuk menambahkan harfiah enumerasi ke enumerasi domain, klik kanan enumerasi domain di Penjelajah DSL, kemudian klik Tambahkan Harfiah Enumerasi Baru.

Secara default, properti yang memiliki jenis enumerasi hanya dapat diatur ke satu nilai enumerasi pada satu waktu. Jika Anda ingin pengguna dan pemrogram dapat mengatur kombinasi nilai apa pun - "bidang bit" - atur properti IsFlags dari Enumerasi.

Jenis Eksternal

Saat Anda mengatur jenis properti domain, jika Anda tidak menemukan jenis yang Anda inginkan di daftar drop-down Jenis, Anda dapat menambahkan jenis eksternal. Misalnya, Anda dapat menambahkan jenis System.Drawing.Color ke daftar.

Untuk menambahkan jenis, klik kanan akar model di Penjelajah DSL, kemudian klik Tambahkan Jenis Eksternal Baru. Di jendela Properti, atur nama menjadi Warna dan namespace layanan menjadi System.Drawing. Jenis ini sekarang muncul di Penjelajah DSL pada Jenis Domain. Anda dapat memilihnya kapan pun Anda mengatur jenis properti domain.

Menyesuaikan Bahasa Khusus Domain

Menggunakan teknik yang dijelaskan dalam topik ini, Anda dapat dengan cepat membuat DSL dengan notasi diagram, formulir XML yang dapat dibaca, dan alat dasar yang diperlukan untuk menghasilkan kode dan artefak lainnya.

Ada dua metode untuk memperluas definisi DSL:

  1. Sesuaikan DSL menggunakan lebih banyak fitur Definisi DSL. Misalnya, Anda dapat membuat alat konektor tunggal yang dapat membuat beberapa jenis konektor, dan Anda dapat mengontrol aturan yang apabila menghapus satu elemen juga menghapus elemen terkait. Teknik-teknik ini sebagian besar dicapai dengan mengatur nilai dalam Definisi DSL, dan sebagian teknik ini memerlukan beberapa baris kode program.

    Untuk informasi selengkapnya, lihat Mengkustomisasi dan Memperluas Bahasa Khusus Domain.

  2. Perluas alat pemodelan Anda menggunakan kode program untuk mencapai efek yang lebih canggih. Misalnya, Anda dapat membuat perintah menu yang dapat mengubah model, dan Anda dapat membuat alat yang mengintegrasikan dua DSL atau lebih. VMSDK dirancang khusus untuk memudahkan integrasi ekstensi Anda dengan kode yang dihasilkan dari Definisi DSL. Untuk informasi selengkapnya, lihat Menulis Kode untuk Menyesuaikan Bahasa Khusus Domain.

Mengubah Definisi DSL

Saat Anda membuat item apa pun dalam definisi DSL, banyak nilai default diatur secara otomatis. Setelah ditetapkan, Anda dapat mengubahnya. Ini menyederhanakan pengembangan DSL, selagi tetap memungkinkan kustomisasi yang kuat.

Misalnya, saat Anda memetakan bentuk ke elemen, Jalur Elemen Induk pemetaan secara otomatis diatur sesuai dengan hubungan penyematan kelas domain. Namun, jika nanti Anda mengubah hubungan penyematan, jalur elemen induk tidak diubah secara otomatis.

Oleh karena itu, Anda harus menyadari bahwa ketika Anda mengubah beberapa hubungan dalam Definisi DSL Anda, bukan hal yang aneh bagi kesalahan untuk dilaporkan ketika Anda menyimpan definisi, atau ketika Anda Mengubah Semua Templat. Sebagian besar kesalahan ini mudah diperbaiki. Klik dua kali laporan kesalahan untuk melihat lokasi kesalahan.

Lihat juga Cara: Mengubah Namespace Layanan Bahasa Khusus Domain.

Pemecahan Masalah

Tabel berikut mencantumkan beberapa masalah paling umum yang dihadapi saat Anda merancang DSL, bersama dengan saran untuk solusinya. Saran lainnya tersedia di Forum Ekstensibilitas Alat Visualisasi.

Masalah Saran
Perubahan yang saya buat dalam file Definisi DSL tidak berpengaruh. Klik Ubah Semua Templat di toolbar di atas Penjelajah Solusi, kemudian bangun kembali solusi tersebut.
Bentuk memperlihatkan nama dekorator alih-alih nilai properti. Siapkan pemetaan dekorator. Pada diagram Definisi DSL, klik peta elemen diagram, yang merupakan garis abu-abu antara kelas domain dan kelas bentuk.

Buka jendela Detail DSL. Jika Anda tidak dapat melihatnya, pada menu Tampilan, arahkan ke Jendela Lain, kemudian klik Detail DSL.

Klik tab Peta Dekorator. Pilih nama dekorator. Pastikan bahwa kotak di sampingnya dicentang. Pada Properti tampilan, pilih nama properti domain.

Untuk informasi selengkapnya, lihat Bentuk pada Diagram.
Di Penjelajah DSL, saya tidak dapat menambahkan ke koleksi. Misalnya, ketika saya mengeklik kanan Alat, tidak ada perintah "Tambahkan Alat" di menu.

Di penjelajah untuk DSL saya, saya tidak dapat menambahkan elemen ke daftar.
Klik kanan item di atas node yang Anda coba. Saat Anda ingin menambahkan ke daftar, perintah Tambahkan tidak ada di node daftar, tetapi di pemiliknya.
Saya membuat kelas domain, tetapi saya tidak dapat membuat instans di penjelajah bahasa. Setiap kelas domain kecuali akar harus merupakan target hubungan penyematan.
Di penjelajah untuk DSL saya, elemen hanya ditampilkan dengan nama jenisnya. Di Definisi DSL, pilih properti domain kelas dan di jendela Properti, atur Is Element Name ke true.
DSL saya selalu terbuka di editor XML. Ini dapat terjadi karena kesalahan saat file sedang dibaca. Namun, bahkan setelah memperbaiki kesalahan tersebut, Anda harus secara eksplisit me-reset editor menjadi perancang DSL Anda.

Klik kanan item proyek, klik Buka Dengan dan pilih YourLanguageDesigner (Default).
Kotak alat DSL saya tidak muncul setelah saya mengubah nama assembly. Periksa dan perbarui DslPackage\GeneratedCode\Package.tt Untuk informasi selengkapnya, lihat Cara: Mengubah Namespace Layanan Bahasa Khusus Domain.
Kotak alat DSL saya tidak muncul, tetapi saya belum mengubah nama assembly.

Atau, kotak pesan muncul yang melaporkan kegagalan untuk memuat ekstensi.
Reset instans eksperimental, dan bangun kembali solusi Anda.

1. Di menu Mulai Windows, di bawah Semua Program, perluas Visual Studio SDK , lalu Alat, lalu klik Reset Instans Eksperimental Microsoft Visual Studio.
2. Pada menu Build, pilih Bangun ulang Solusi.