Corak reka bentuk menjadikan aplikasi J2EE lebih baik

Sejak penubuhannya, J2EE (Java 2 Platform, Enterprise Edition) telah mempermudah pembinaan aplikasi perusahaan di Java. Oleh kerana J2EE diadopsi secara lebih luas, pengembang menyedari perlunya pendekatan yang ditentukan yang memudahkan dan menyeragamkan pembangunan aplikasi. Anda boleh mula mencapai matlamat tersebut dengan menyeragamkan lapisan seni bina aplikasi anda .

Lapisan seni bina secara amnya merangkumi kerumitan teknikal aplikasi yang tidak bergantung pada logik perniagaan, sehingga memberikan gandingan yang longgar antara fungsi perniagaan dan infrastruktur teknikal yang mendasari. Dalam artikel ini, saya menerangkan metode yang muncul untuk membangun arsitektur aplikasi untuk proyek J2EE - salah satu yang menggunakan corak reka bentuk untuk memberikan standardisasi dan kesederhanaan yang dituntut oleh seni bina yang baik.

Seni bina aplikasi dan J2EE

J2EE adalah teknologi infrastruktur yang hebat. Ini menyediakan standard yang seragam untuk tugas-tugas tingkat bawah stack teknologi, seperti komunikasi pangkalan data atau pengedaran aplikasi. J2EE, bagaimanapun, tidak memimpin pemaju untuk membina aplikasi yang berjaya. Pencipta J2EE, melihat ke dalam timbunan teknologi, bertanya-tanya: "Bagaimana kita dapat menyeragamkan API ini?" Mereka seharusnya melihat pengembang aplikasi dan bertanya: "Bagaimana saya dapat memberikan pembangun blok bangunan yang mereka perlukan untuk fokus pada aplikasi bisnis mereka?"

Semasa memulakan projek J2EE baru, beberapa ahli pasukan sering bertanya: "Sekiranya J2EE itu sendiri adalah seni bina, mengapa kita memerlukan lebih banyak lagi?" Banyak pembangun berpendapat bahawa salah faham pada awal J2EE, tetapi pemaju J2EE yang berpengalaman memahami bahawa J2EE gagal memberikan seni bina aplikasi yang diperlukan untuk menyampaikan aplikasi berkualiti tinggi secara konsisten. Pembangun ini sering menggunakan corak reka bentuk untuk mengisi jurang itu.

Corak rekaan

Dalam pengaturcaraan, corak reka bentuk membolehkan anda memanfaatkan pengalaman kolektif komuniti pemaju dengan berkongsi masalah dan penyelesaian yang memberi manfaat kepada semua orang. Pola reka bentuk mesti merangkumi definisi dan konteks masalah, kemungkinan penyelesaian, dan akibat penyelesaiannya.

Untuk tujuan seni bina aplikasi J2EE, corak reka bentuk tergolong dalam dua kategori: corak pengembangan perisian umum dan corak yang mengenal pasti cabaran J2EE tertentu. Corak reka bentuk khusus J2EE mengenal pasti set minimum masalah yang diketahui yang harus diselesaikan oleh seni bina aplikasi yang kukuh. Kumpulan yang pertama, yang merupakan corak pengembangan perisian yang tidak khusus untuk J2EE, terbukti sama kuat — bukan untuk mengenal pasti masalah, tetapi untuk membimbing pembinaan seni bina.

Mari kita periksa setiap kawasan dengan lebih terperinci.

Corak reka bentuk J2EE

Corak reka bentuk J2EE telah berkembang sejak beberapa tahun kebelakangan ini kerana masyarakat Jawa telah memperoleh pengalaman J2EE. Corak reka bentuk ini mengenal pasti potensi masalah yang dihadapi ketika menggunakan pelbagai teknologi yang ditentukan J2EE dan membantu pembangun membina keperluan seni bina aplikasi. Corak reka bentuk Pengawal Depan yang popular, misalnya, mengubah kod servlet tidak berstruktur menjadi pengawal yang mengingatkan perkembangan GUI (antara muka pengguna grafik) yang diperkemas.

Corak reka bentuk J2EE mengenal pasti masalah domain yang kemungkinan besar akan muncul dalam projek J2EE anda. Sekiranya masalahnya jarang berlaku, corak reka bentuk tidak akan berkembang untuk menanganinya. Dengan ini, anda akan mendapat manfaat daripada menangani setiap masalah domain dalam seni bina anda. Untuk menyelesaikan semuanya, buat senarai semak untuk mengesahkan kesempurnaan seni bina anda. Proses itu berbeza dengan proses untuk corak reka bentuk pengembangan perisian yang akan saya bincangkan seterusnya, kerana anda perlu menerapkan corak tersebut hanya bila dan jika sesuai.

Oleh itu, di mana anda menjumpai corak reka bentuk J2EE? Sun Microsystems menawarkan dua buku yang mengandungi banyak corak J2EE:

  • Aplikasi Merancang Perusahaan J2EE BluePrint Group dengan Java 2 Platform (Enterprise Edition), Nicholas Kassem et al. (Addison-Wesley, 2000; ISBN: 0201702770)
  • Corak J2EE Teras Kumpulan Perkhidmatan Profesional Sun : Amalan Terbaik dan Strategi Reka Bentuk, Deepak Alur, John Crupi, dan Dan Malks (Prentice Hall, 2001; ISBN: 0130648841)

(Lihat Sumber untuk pautan ke kedua buku.)

Di luar sumber Sun, penerbitan lain menawarkan maklumat corak reka bentuk J2EE, termasuk berbagai majalah atau laman web industri Java (seperti JavaWorld ), serta banyak buku. (Lihat Sumber untuk pautan kepada sesetengah laman web, termasuk JavaWorld ' s Corak Design halaman Indeks Topikal.)

Corak reka bentuk pembangunan perisian

Ketahui juga corak reka bentuk pengembangan perisian, dibahagikan kepada corak reka bentuk berorientasikan objek umum (OO) dan corak reka bentuk khusus Java. Corak Factory, misalnya, mewakili corak reka bentuk OO yang kuat untuk merangkumi penciptaan objek untuk membolehkan penggunaan semula dan memenuhi keperluan perubahan sistem. Sebaliknya, corak reka bentuk bahasa Java menjelaskan spesifik bahasa Java. Sebilangannya unik untuk Java dan biasanya tidak formal (misalnya, pengecualian dan primitif), sementara yang lain adalah corak OO yang disempurnakan untuk diterapkan di Java. Buku Gang of Four yang terkenal, Corak Reka Bentuk oleh Eric Gamma et al., Memperincikan banyak corak pembangunan perisian umum yang berguna untuk semua pengaturcara.

Jangan menolak corak ini hanya kerana tidak khusus J2EE. Sebaliknya, corak seperti itu dapat membuktikan sama kuatnya, jika tidak lebih daripada pola reka bentuk J2EE, kerana:

  • Walaupun corak reka bentuk J2EE baru dan berkembang (kerana J2EE baru dan berkembang), corak yang lain mendapat manfaat dari usia, kerana industri mempunyai lebih banyak masa untuk mengkaji dan menyempurnakannya.
  • Mereka sering menjadi asas dari mana corak reka bentuk J2EE berpunca.
  • Mereka membina asas di mana penyelesaian khusus J2EE dilaksanakan. Membina asas ini secara meluas mempengaruhi ketahanan dan kepanjangan seni bina. Sekiranya tidak dibina dengan betul, asas itu akan mengurangkan kegunaan seni bina tanpa mengira berapa banyak masalah J2EE yang diselesaikan.

Jangan buat senarai semak yang merangkumi corak pengembangan perisian yang diperlukan oleh seni bina anda, seperti yang anda lakukan dengan corak J2EE. Sebaliknya, gunakan corak sedemikian jika sesuai berdasarkan cabaran khusus projek anda. Ramai pembangun secara keliru percaya bahawa produk mereka akan bertambah baik jika mereka menggunakan lebih banyak corak — atau jika mereka menggunakan semuanya! Namun demikian, perkara tersebut tidak berlaku. Gunakan budi bicara dan kehebatan semasa memutuskan corak mana yang akan digunakan dan bagaimana menggunakannya bersama.

Corak reka bentuk: Di manakah kodnya?

Perlu diingat bahawa corak reka bentuk tidak disertakan dengan pelaksanaan yang tepat, atau kod sumber, yang akan anda gunakan. Penawaran corak reka bentuk berkisar dari keterangan teks yang jarang hingga dokumentasi yang kaya hingga beberapa contoh kod. Cabarannya datang dalam menerapkan idea-idea kuat corak. Idea-idea ini mesti diterapkan ke persekitaran di mana ia akan digunakan; persekitaran menentukan pelaksanaan yang betul.

Sebagai analogi, pertimbangkan corak reka bentuk untuk membina asas rumah. Corak reka bentuk mengenal pasti masalah, konteks, dan kemungkinan penyelesaian untuk membina pondasi - maklumat yang sangat berharga bagi pekerja binaan di lapangan. Walau bagaimanapun, pekerja mesti tetap membina asasnya. Bukankah pekerja pembinaan itu mendapat keuntungan lebih daripada diberi asas (sama dengan pembangun perisian yang diberikan pelaksanaannya)? Mungkin asas ini hanya menjadi sebatang konkrit yang boleh dibina rumah itu. Masalahnya: Asasnya mesti disatukan dengan rumah itu sendiri dan tanah di mana rumah itu akan tinggal. Bagaimana yayasan yang sudah siap dibina dapat menampung semua kemungkinan rencana lantai rumah (segi empat tepat, persegi, dan bentuk ganjil lain) dan semua kemungkinan pemandangan (di atas bukit,di tengah hutan, dan sebagainya)?

Kembali ke dunia perisian, kemungkinan menggunakan corak reka bentuk prebuilt bergantung pada dua faktor:

  • Pelaksanaannya, bukan corak reka bentuk individu, mewakili penyelesaian. Penyelesaiannya dapat menggabungkan pelbagai corak reka bentuk, dan, dengan melakukannya, akan mengetahui bagaimana corak reka bentuk individu bermain bersama.
  • Penyelesaiannya mesti dapat disesuaikan, yang menjawab soalan terakhir dari analogi asas prebuilt: pondasi mesti dapat menyesuaikan diri dengan bentuk muka bumi dan denah lantai. Seperti yang anda bayangkan, memerlukan tukang yang sangat mahir untuk membina asas yang dapat disesuaikan berbanding dengan asas yang asas.

Corak reka bentuk biasa

Jadual di bawah menyenaraikan beberapa corak reka bentuk biasa dari kedua-dua sumber J2EE dan corak OO yang lebih luas.

Corak reka bentuk biasa
Corak reka bentuk J2EE Corak pembangunan perisian
Fasad Sesi Singleton
Penyusun Objek Nilai Jambatan
Corak Pencari Perkhidmatan Prototaip
Delegasi Perniagaan Kilang Abstrak
Entiti Komposit Berat badan
Pengendali Senarai Nilai Pengantara
Pencari Perkhidmatan Strategi
Entiti Komposit Penghias
Objek Nilai Nyatakan
Perkhidmatan kepada Pekerja Pengulangan
Objek Akses Data Rantai Tanggungjawab
Penapis Memintas Model View Controller II
Lihat Pembantu Memento
Pandangan Komposit Pembina
Paparan Penghantar Kaedah Kilang

Mari kita lihat dua contoh corak reka bentuk J2EE: Corak Sesi Fasad dan Objek Objek. Kedua-duanya menunjukkan bagaimana corak reka bentuk J2EE memfokuskan pada permasalahan khususnya pada lingkungan J2EE, berbanding dengan corak reka bentuk pengembangan perisian yang umumnya berlaku untuk setiap usaha pengembangan aplikasi.

Contoh: Corak Session Facade J2EE

Corak Sesi Fasad berkembang dari pengalaman dengan Enterprise JavaBeans (EJB). Sistem yang dibina di atas EJB entiti yang baru diperkenalkan (yang berkomunikasi dengan pangkalan data) semakin perlahan. Pengujian prestasi mendedahkan masalah yang timbul dari beberapa panggilan rangkaian yang dibuat ketika berkomunikasi dengan EJB entiti, yang menambahkan overhead untuk mewujudkan sambungan rangkaian, menyusun data untuk pengiriman dan penerimaan, dan kesan lain.

Sebagai tindak balas, corak Session Facade meningkatkan prestasi dengan memusatkan banyak klik rangkaian ke dalam satu panggilan. Session Facade menggunakan sesi EJB tanpa status untuk menjadi orang tengah antara panggilan pelanggan dan interaksi EJB entiti yang diperlukan. Terdapat lebih banyak corak untuk meningkatkan prestasi akses pangkalan data, termasuk corak Fast Lane Reader dan Objek Akses Data.

Contoh: Corak Objek Objek J2EE

Corak Nilai Objek J2EE juga bertujuan untuk meningkatkan prestasi sistem yang menggunakan EJB melalui rangkaian. Panggilan rangkaian yang menyebabkan overhead dari contoh sebelumnya mengambil medan data individu. Sebagai contoh, anda mungkin mempunyai PersonEJB entiti dengan kaedah seperti getFirstName(), getMiddleName(), dan getLastName(). Dengan corak reka bentuk Objek Nilai, anda dapat mengurangkan banyak panggilan rangkaian ke satu panggilan tunggal dengan kaedah pada entiti EJB, seperti getPersonValueObject(), yang mengembalikan data sekaligus. Objek nilai tersebut berisi data yang diwakili oleh EJB entitas dan dapat diakses sesuai kebutuhan tanpa menimbulkan overhead panggilan jaringan.

Contoh: Corak Flyweight OO

Untuk contoh corak reka bentuk OO yang berlaku secara luas, pertimbangkan corak Flyweight, yang meningkatkan prestasi aplikasi melalui penggunaan semula objek. Perisian OO menghasilkan overhead — kitaran CPU yang terbuang, pengumpulan sampah, dan peruntukan memori — ketika mencipta dan memusnahkan objek. Sekiranya sistem dapat menggunakan semula objek tersebut, anda boleh mengelakkan overhead tersebut. Objek sering tidak dapat digunakan kembali, bagaimanapun, kerana mengandungi maklumat (disebut keadaan ) khusus untuk pengguna objek saat ini. Corak Flyweight memberikan pendekatan untuk memindahkan keadaan ke tempat lain sehingga objek yang lain dapat digunakan semula.

Gabungkan semuanya: Contoh kegigihan

Setelah mengetahui asasnya, anda boleh mula menerapkan corak reka bentuk dalam amalan pengembangan anda. Tetapi bagaimana anda sebenarnya menggunakan corak? Mulakan dengan mengenal pasti domain atau masalah teknikal yang memerlukan penyelesaian. Kegigihan — menyelesaikan ketidakcocokan pangkalan data objek-ke-hubungan lama — mewakili contoh yang baik untuk kebanyakan aplikasi perusahaan. Mari lihat langkah-langkah yang diperlukan untuk merancang dan membina lapisan ketekunan seni bina aplikasi.

Ikuti pendekatan seni bina dan reka bentuk OO tradisional, buat kes penggunaan yang menggambarkan keperluan kegigihan anda. Kes penggunaan yang mungkin termasuk:

  1. Ketekunan objek harus telus dari sudut pandangan pemaju.
  2. Mekanisme kegigihan - EJB entiti, Objek Akses Data, dan sebagainya - harus dikonfigurasi pada tahap seni bina.
  3. Seni bina kita harus menggunakan teknologi J2EE tetapi merangkumi kebergantungan J2EE. Kita seharusnya dapat mengubah vendor pelayan aplikasi J2EE, versi J2EE, atau mengganti J2EE sepenuhnya tanpa memerlukan perbaikan keseluruhan aplikasi.
  4. Lapisan ketekunan yang dihasilkan harus dapat digunakan semula di seluruh projek. Ini harus menjadi sebahagian daripada seni bina aplikasi kami yang sedang berjalan.

Setelah anda mengenal pasti masalahnya, anda dapat menentukan corak mana yang berlaku. Ingat bahawa untuk corak J2EE, anda harus menentukan corak mana yang berlaku di kawasan masalah dan mengatasinya. Untuk kegigihan, corak reka bentuk J2EE yang berkaitan adalah (lihat buku corak reka bentuk J2EE Sun di Sumber):

  • Objek Nilai
  • Pembaca Lorong Pantas
  • Objek Akses Data
  • Fasad Sesi
  • Entiti Komposit
  • Pengendali Senarai Nilai

Oleh kerana anda akan menggunakan EJB, sertakan corak Business Delegate dan Service Locator untuk menangani akses EJB.

Selain itu, menyelesaikan kes penggunaan kedua dan ketiga memerlukan corak reka bentuk pembangunan perisian tradisional. Bagaimana anda merangkumi kebergantungan dan mempunyai mekanisme ketekunan yang boleh dikonfigurasi? Beberapa corak pengembangan perisian yang berlaku termasuk:

  • Kilang
  • Pengantara
  • Strategi