Saya telah menulis portal ASP.NET WebForms untuk klien. Proyek ini telah berevolusi daripada direncanakan dan terstruktur dengan baik sejak awal. Akibatnya, semua kode dihancurkan bersama dalam proyek yang sama dan tanpa lapisan. Klien sekarang senang dengan fungsionalitasnya, jadi saya ingin memperbaiki kode sehingga saya akan percaya diri untuk merilis proyek. Karena tampaknya ada banyak cara berbeda untuk mendesain arsitektur, saya ingin beberapa pendapat tentang pendekatan terbaik untuk diambil.
KEGUNAAN
Portal ini memungkinkan administrator untuk mengkonfigurasi template HTML. "Mitra" terkait lainnya akan dapat menampilkan templat ini dengan menambahkan kode IFrame ke situs mereka. Dalam templat ini, pelanggan dapat mendaftar dan membeli produk. API telah diimplementasikan menggunakan WCF yang memungkinkan perusahaan eksternal untuk berinteraksi dengan sistem juga. Bagian Admin memungkinkan Administrator untuk mengkonfigurasi berbagai fungsi dan melihat laporan untuk setiap mitra. Sistem mengirimkan faktur dan pemberitahuan email kepada pelanggan.
ARSITEKTUR SAAT INI
Saat ini menggunakan EF4 untuk membaca / menulis ke database. Objek EF digunakan langsung dalam file aspx. Ini telah memfasilitasi pengembangan yang cepat sementara saya telah menulis situs tetapi mungkin tidak dapat diterima untuk tetap seperti itu karena erat dengan db dengan UI. Logika bisnis khusus telah ditambahkan ke kelas parsial dari objek EF.
PERTANYAAN
Tujuan dari refactoring adalah untuk membuat situs scalable, mudah dirawat dan aman.
Arsitektur seperti apa yang terbaik untuk ini? Tolong jelaskan apa yang seharusnya ada di setiap layer, apakah saya harus menggunakan pola DTO / POCO / Rekaman Aktif dll.
Apakah ada cara yang kuat untuk menghasilkan-DTO / BO secara otomatis sehingga peningkatan di masa depan akan mudah diterapkan meskipun ada lapisan tambahan?
Apakah akan bermanfaat untuk mengubah proyek dari WebForms ke MVC?
Jawaban:
Pola ASP.NET MVP adalah arsitektur terbaik untuk aplikasi webforms ASP.NET jangka panjang . Ini mulai bermain dengan konsep "pemisahan keprihatinan", yang merupakan tren di balik pola MV *.
Pertanyaan tentang Mengapa menggunakannya? - dibahas secara rinci dalam posting ini - ASP.NET MVP
sumber
sumber
Seperti yang disebutkan ElYusubov, pola MVP bisa menjadi besar.
Konsep kuncinya adalah menghapus sebagian besar atau semua logika Anda dari kode di belakang. Logika tidak harus terikat ke halaman. Bagaimana jika Anda perlu menggunakan kembali logika dari satu halaman di halaman lain? Anda akan tergoda untuk menyalin dan menempel. Jika Anda melakukan ini maka proyek Anda akan dapat dipertahankan.
Jadi, sebagai permulaan mulailah refactoring logika Anda dari kode-belakang dan letakkan di lapisan bisnis. Jika Anda berhasil mendapatkan semua logika dari kode-belakang maka Anda dapat mengimplementasikan antarmuka yang diperlukan untuk menjadi MVP sejati.
Pastikan juga akses data Anda terpisah dari logika bisnis Anda. Buat layer data dan mulai refactoring di ujung itu juga. Karena Anda menggunakan EF4, ini bukan masalah karena EF harus memisahkannya. Anda harus dapat dengan mudah memindahkan semua file EF ke proyek lain dan cukup menambahkan referensi ke proyek yang membutuhkannya. Manfaat tambahan adalah, Anda mungkin perlu referensi model data Anda di proyek lain.
Untuk menghindari kewalahan, lakukan refactor sedikit demi sedikit. Setiap kali Anda menyentuh sepotong kode, pertimbangkan untuk mengembalikan kode di sekitarnya. Jika Anda melakukan ini, seiring waktu proyek Anda dapat menjadi lebih dapat dipertahankan.
Edit
Anda bertanya tentang memiliki kode di belakang mewarisi kelas logika bisnis. Ini tidak dapat dilakukan karena kode di belakang halaman "is-a". C # tidak memungkinkan pewarisan berganda, sehingga kelas kode-belakang tidak bisa berupa halaman dan objek kustom. Anda perlu memisahkan logika secara konseptual. Mungkin saja kode di belakang kode Anda melakukan banyak hal berbeda. Kelas harus melakukan satu hal dan satu hal saja. Coba dan pikirkan bagaimana Anda secara konseptual dapat menarik fungsionalitas yang ada. Misalnya, katakanlah Anda memiliki halaman pendaftaran dan Anda mengumpulkan informasi pengguna. Anda mungkin memiliki tombol yang disebut register dan acara klik yang terkait dengan tombol itu. Jika demikian, Anda menyimpan informasi pengguna dan melakukan pemrosesan apa pun yang Anda butuhkan. Anda bisa membuat objek Pendaftaran untuk menangani semua logika itu.
Ini bukan hanya pemisahan yang lebih bersih tetapi juga bisa menjadi cara untuk mendokumentasikan kode Anda sendiri. Ketika seseorang membaca kode Anda, mereka melihat Anda memanggil objek Registrasi sehingga Anda tahu persis apa yang terjadi.
Jika Anda ingin secara ketat mengikuti pola MVP, alih-alih meneruskan parameter ke objek Registrasi, kode-belakang akan mengimplementasikan antarmuka. Implementasi antarmuka pada dasarnya akan memetakan semua objek tampilan (bidang teks dll) ke antarmuka. mis. public string FirstName {get {return txtFirstName.Text; }}
Setelah selesai, Anda bisa melewati halaman ke objek Regisration
Registrasi.Pendaftar Pengguna (ini);
Dan metode RegisterUser ini akan menggunakan antarmuka sebagai parameter
public bool RegisterUser (pengguna IUser) {user.FirstName ...}
antarmuka publik IUser {public string FirstName; }
Jika MVP ini terdengar membingungkan, fokus saja pada refactoring dan ketahuilah semua ini untuk memaksimalkan penggunaan kembali kode. Tidak ada sejak mengulangi diri Anda sendiri. Itu kepala sekolah KERING .
sumber