Pertanyaan Bagaimana Anda mengatasi ini di Jawa? Pola desain apa pun untuk merujuk ke data yang tidak diketahui?


Sistem saya perlu antarmuka dengan beberapa sistem lain, dan mungkin lebih banyak di masa depan. Aplikasi web memiliki model data internal yang sesuai untuk tujuannya, namun ketika menampilkan data ini aplikasi web perlu mengimpor atau menampilkan data dari sistem lain. Ditentukan oleh pengguna. Saya menggunakan EJB3 dan masalahnya tampaknya adalah bagaimana memuat tabel yang tidak diketahui dan menampilkan isinya dengan cara yang bagus diformat?

Katakanlah Anda memiliki kelas Entitas seperti

@Entity
public class myDatas() { 
    private String field; private Other data;
    // getters and setters 
}

public interface Other<T>  {
public T getOtherData();

T perlu dibuat secara dinamis sebagai kelas data karena saya tidak tahu sekarang bagaimana bentuk datanya. Bagaimana cara melakukannya?

Apakah ada cara berbeda untuk melakukan ini? Kapan entitas Anda perlu merujuk ke tabel yang tidak dikenal?

Apakah pola adaptor cocok untuk ini?

EDIT: Saya mungkin bisa menggunakan openjpa untuk melakukan pemetaan terbalik dari skema database sistem eksternal untuk membuat kelas data atau objek entitas. Namun saya tidak yakin apakah saya bisa melakukan ini selama runtime, wont kacang entitas perlu diakui / disebarkan oleh AS juga? Jika itu berhasil, cara hacky akan, baik, untuk memberikan tombol untuk mengambil tabel dan membalik-peta itu ke kacang entitas, kemudian kembali-itu di AS. Tapi, itu sangat jelek ...

EDIT2: Apakah groovy cocok untuk sesuatu seperti ini? Saya mendengar itu adalah bahasa yang dinamis.


4
2018-01-19 15:57


asal


Jawaban:


JPA tidak cocok untuk itu, karena apa yang Anda butuhkan tampaknya cukup dinamis. Saya akan menggunakan JDBC secara langsung, yang memberi Anda akses ke metadata skema dan representasi umum hasil Anda sebagai RowSets.


3
2018-01-19 17:52



Satu opsi yang memungkinkan;

Tentukan kelas yang menyimpan informasi tentang satu kolom tabel

class ColumnMetadata{
    String columnName;
    String columnValue;
    String (maybe enum) dataType;

    int length;
   .
   .

}

dan untuk seluruh data baris; Anda bisa menyimpan List<ColumnMetadata> mewakili satu data baris dari tabel tidak dikenal.

Anda dapat menambahkan lebih banyak properti ke kelas ColumnMetada jika Anda memerlukan sedikit pun spesifik lainnya.

Ketika Anda mendapatkan data tabel yang tidak diketahui Anda perlu mengimplementasikan logika (menggunakan refleksi) yang akan mengubahnya ke jenis data ini. Dan Anda dapat menggunakan Daftar ini mewakili satu data baris di aplikasi Anda.


1
2018-01-19 17:42



Apa yang Anda coba lakukan sangat rumit. Jika Anda memiliki sejumlah sistem eksternal, Anda dapat mendesain sistem Anda dengan memikirkan itu, dan membuat entitas untuk data sistem eksternal.

Dalam kasus Anda, di mana Anda harus menambahkan sistem secara dinamis, itu bukan ide yang baik untuk menyimpan data mereka. Salah satu asumsi yang mendasari sistem yang menggunakan RDBMS adalah bahwa model data didefinisikan dengan baik dan dipahami. Jika Anda tidak memahami hubungan di depan, sulit untuk merancang model data di sekitar data.

Hal lain yang perlu dipertimbangkan ketika menggunakan sistem eksternal - apa yang terjadi jika mereka mengubah API mereka?


1
2018-01-19 18:02