pola desain untuk konversi objek (java)

21

Saya tidak terlalu sering menggunakan pola desain, di samping pabrik dan MVC sesekali, dan saya ingin mulai menggunakannya lebih banyak.

Saya punya kasus konkret yang ada dan saya ingin pendapat Anda tentang penggunaan pola desain dalam kasus ini.

Dalam aplikasi saya, saya harus sering mengkonversi objek dalam situasi yang berbeda. Saya mungkin harus mengonversi Hibernate POJO ke DTO, karena saya menggunakan GWT dan Hibernate POJO tidak berseri dan tidak dapat dikirim melalui saluran.

Dalam situasi lain saya mungkin perlu mengkonversi objek Java ke SolrInputDocument untuk pengindeksan oleh Solr.

Saya ingin tahu apakah saya harus menggunakan pola desain untuk ini. Tampaknya "konversi objek" adalah tugas umum yang dapat ditangani dengan cara yang fleksibel / abstrak dengan suatu pola, tetapi saya tidak benar-benar mengerti caranya.

Tanpa pola, saya hanya akan membuat kelas terpisah untuk setiap jenis konversi, misalnya CourseToSolrInputDocument (Kursus adalah entitas Hibernate dalam aplikasi saya). Atau CourseToCourseDTO. Setiap kelas konversi ini mungkin memiliki metode statis tunggal yang disebut convert()yang mengambil objek sumber sebagai input dan mengembalikan objek output.

Tapi itu bukan pola, bukan? Jadi saya mulai dengan sesuatu dengan obat generik dan membuat kelas ini yang mengimplementasikan antarmuka Konverter. Tapi entah kenapa terasa konyol untuk membuat antarmuka generik dan saya tidak benar-benar melihat keuntungan selain bisa memberi selamat kepada diri sendiri atas penggunaan obat generik.

public class CourseToSolrInputDocument implements Converter<Course, SolrInputDocument>         {
    @Override
    public void convert(Course source, SolrInputDocument destination) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
}

Jadi, pertanyaan sebenarnya di sini adalah: apakah ada pola yang berlaku untuk konversi objek generik dan, apa yang akan menjadi pendekatan Anda dan apa keuntungan dibandingkan hanya menggunakan pendekatan tipe kelas per konversi?

Julius
sumber
Pola lebih dari nama untuk apa yang Anda lakukan (dan contoh cara melakukannya dengan benar), daripada sesuatu yang mengagumkan untuk digunakan. Jadi pertanyaan yang lebih baik daripada bagaimana saya bisa menggunakan lebih banyak pola adalah: Patters apa yang sudah saya gunakan (mungkin dalam beberapa cara tidak lengkap / berbelit-belit).
user470365

Jawaban:

18

The Translator Pola adalah apa yang Anda minta.

Tetapi saya menduga apa yang Anda cari adalah kerangka kerja, lebih dari sekadar pola. Saya percaya Dozer populer di dunia Jawa.

pdr
sumber
Saya tahu Dozer dan Apache Beanutils. Saya ingin menggunakan salah satu yang ada di dalam "struktur konversi" saya. Sementara itu saya menemukan bahwa Spring menawarkan solusi untuk mengkonversi objek yang dapat ditemukan di sini: static.springsource.org/spring/docs/3.0.0.RC3/reference/html/… . Saya telah melihatnya sebelumnya, tetapi beberapa waktu yang lalu, jadi antarmuka saya sendiri didasarkan pada apa yang saya ingat dari Spring. Saya akan pergi dengan solusi Spring, karena Spring sudah dalam proyek saya dan sepertinya pendekatan yang bagus.
Julius