Saya memiliki situs MVC yang menggunakan pola repositori. Saya tidak merasa cukup menggunakan gaya MVC, jadi saya bersiap-siap untuk mendesain ulang sebagian. Tapi saya juga ingin melakukannya sehingga jika front-end berubah, akan lebih mudah untuk bertukar.
Inilah yang saya miliki saat ini
Model - beberapa model saya mengandung entitas / kelas saya secara langsung. (Model login berisi kelas Pelanggan, yang merupakan korelasi langsung dengan tabel tabel Pelanggan / repositori) Tampilan - beberapa pandangan saya mengandung pertanyaan repo - yaitu
_customerRepo.Query().FirstOrDefault(c => c.Login == User.Identity.Name);
Controllers - Bukan masalah besar di sini, controller memanggil beberapa pertanyaan repo, dan beberapa dari mereka juga menggunakan beberapa layanan untuk memanggil repo - yaitu
_customerService.GetAllCustomers()
yang memanggil
_customerRepo.Query().All();
Inilah pikiran saya:
1) Model harus berisi HANYA data yang perlu disajikan pada tampilan. Bahkan jika semua properti tabel / objek Pelanggan disajikan pada tampilan, mereka harus ditulis ulang ke model / kelas mereka sendiri sehingga tampilan tidak tahu apa-apa tentang arsitektur database atau objek backend
2) Tampilan seharusnya hanya mengakses objek model
3) (Dan di sinilah saya berjuang di jalan mana yang harus diambil)
a) Pengendali (atau di suatu tempat di sisi MVC, harus berupa kode yang mengubah data objek yang dikembalikan dari repo / layanan dan mengubahnya menjadi model. Saya berasumsi saya bisa menempatkan kode ini dalam konstruktor model. Tetapi saya ' Telah memperhatikan bahwa DI mengharapkan konstruktor kosong default jika ada kesalahan validasi
b) Pengendali memanggil antarmuka repo pada metode yang disebut dengan baik untuk mengambil data (yaitu _customerRepo.GetAllCustomers ()
c) HANYA Pengontrol mengakses lapisan layanan. Lapisan layanan kemudian adalah satu-satunya hal yang berinteraksi dengan lapisan repo.
Apakah saya mencoba mengekstrak model, pengontrol, layanan, lapisan repo terlalu banyak? Apakah lapisan serivces terlalu banyak karena bisa dilakukan oleh repo?
Apa pendekatan yang disarankan untuk mengubah objek / entitas bisnis ke model?