Saya benar-benar perlu melihat beberapa debat yang jujur dan bijaksana tentang manfaat paradigma desain aplikasi perusahaan yang saat ini diterima .
Saya tidak yakin bahwa objek entitas harus ada.
Berdasarkan objek entitas, saya maksudkan hal-hal khas yang cenderung kita bangun untuk aplikasi kita, seperti "Orang", "Akun", "Pesanan", dll.
Filosofi desain saya saat ini adalah:
- Semua akses basis data harus dilakukan melalui prosedur tersimpan.
- Kapan pun Anda membutuhkan data, panggil prosedur tersimpan dan ulangi melalui SqlDataReader atau baris dalam DataTable
(Catatan: Saya juga telah membangun aplikasi perusahaan dengan Java EE, orang-orang java silakan gantikan equvalent untuk contoh .NET saya)
Saya bukan anti-OO. Saya menulis banyak kelas untuk tujuan yang berbeda, tidak hanya entitas. Saya akan mengakui bahwa sebagian besar kelas yang saya tulis adalah kelas pembantu statis.
Saya tidak membangun mainan. Saya berbicara tentang aplikasi transaksional volume besar yang digunakan di beberapa mesin. Aplikasi web, layanan windows, layanan web, interaksi b2b, apa saja.
Saya telah menggunakan ATAU Pemetaan. Saya telah menulis beberapa. Saya telah menggunakan Java EE stack, CSLA, dan beberapa padanan lainnya. Saya tidak hanya menggunakannya tetapi secara aktif mengembangkan dan memelihara aplikasi ini di lingkungan produksi.
Saya telah sampai pada kesimpulan pertempuran-diuji yang objek entitas mendapatkan di jalan kami, dan hidup kita akan jadi lebih mudah tanpa mereka.
Pertimbangkan contoh sederhana ini: Anda mendapat panggilan dukungan tentang halaman tertentu di aplikasi Anda yang tidak berfungsi dengan benar, mungkin salah satu bidang tidak bertahan seperti seharusnya. Dengan model saya, pengembang yang ditugaskan untuk menemukan masalah membuka persis 3 file . ASPX, ASPX.CS dan file SQL dengan prosedur tersimpan. Masalahnya, yang mungkin merupakan parameter yang hilang dari panggilan prosedur tersimpan, membutuhkan beberapa menit untuk menyelesaikannya. Tetapi dengan model entitas apa pun, Anda akan selalu menjalankan debugger, mulai melangkah melalui kode, dan Anda mungkin berakhir dengan 15-20 file terbuka di Visual Studio. Pada saat Anda turun ke bagian bawah tumpukan, Anda lupa di mana Anda mulai. Kita hanya dapat menyimpan begitu banyak hal di kepala kita sekaligus. Perangkat lunak sangat kompleks tanpa menambahkan lapisan yang tidak perlu.
Kompleksitas pengembangan dan pemecahan masalah hanyalah satu sisi dari keluhan saya.
Sekarang mari kita bicara tentang skalabilitas.
Apakah pengembang menyadari bahwa setiap kali mereka menulis atau memodifikasi kode apa pun yang berinteraksi dengan database, mereka perlu melakukan analisis mendalam tentang dampak yang tepat pada database? Dan bukan hanya salinan pengembangan, maksud saya meniru produksi, sehingga Anda dapat melihat bahwa kolom tambahan yang sekarang Anda perlukan untuk objek Anda hanya membatalkan rencana kueri saat ini dan laporan yang berjalan dalam 1 detik sekarang akan memakan waktu 2 menit, hanya karena Anda menambahkan satu kolom ke daftar pilih? Dan ternyata indeks yang Anda butuhkan sekarang sangat besar sehingga DBA harus mengubah tata letak fisik file Anda?
Jika Anda membiarkan orang terlalu jauh dari penyimpanan data fisik dengan abstraksi, mereka akan membuat kekacauan dengan aplikasi yang perlu ditingkatkan.
Saya bukan orang fanatik. Saya dapat diyakinkan jika saya salah, dan mungkin saya salah, karena ada dorongan kuat ke Linq ke Sql, ADO.NET EF, Hibernate, Java EE, dll. Tolong pikirkan tanggapan Anda, jika saya kehilangan sesuatu, saya benar-benar ingin tahu apa itu, dan mengapa saya harus mengubah pemikiran saya.
[Sunting]
Sepertinya pertanyaan ini tiba-tiba aktif kembali, jadi sekarang kita memiliki fitur komentar baru, saya telah berkomentar langsung pada beberapa jawaban. Terima kasih atas balasannya, saya pikir ini adalah diskusi yang sehat.
Saya mungkin seharusnya lebih jelas bahwa saya berbicara tentang aplikasi perusahaan. Saya benar-benar tidak dapat mengomentari, katakanlah, game yang berjalan di desktop seseorang, atau aplikasi seluler.
Satu hal yang harus saya kemukakan di sini sebagai jawaban atas beberapa jawaban yang sama: ortogonalitas dan pemisahan kekhawatiran sering dikutip sebagai alasan untuk menjadi entitas / ORM. Prosedur yang tersimpan, bagi saya, adalah contoh terbaik dari pemisahan kekhawatiran yang dapat saya pikirkan. Jika Anda melarang semua akses lain ke database, selain melalui prosedur tersimpan, secara teori Anda dapat mendesain ulang seluruh model data Anda dan tidak merusak kode apa pun, asalkan Anda mempertahankan input dan output dari prosedur yang tersimpan. Mereka adalah contoh sempurna pemrograman berdasarkan kontrak (asalkan Anda menghindari "pilih *" dan mendokumentasikan set hasil).
Tanyakan pada seseorang yang sudah lama berkecimpung di industri ini dan telah bekerja dengan aplikasi yang berumur panjang: berapa banyak aplikasi dan lapisan UI yang datang dan pergi ketika database sudah ada? Seberapa sulit untuk memperbaiki dan memperbaiki database ketika ada 4 atau 5 lapisan ketekunan yang berbeda menghasilkan SQL untuk mendapatkan data? Anda tidak dapat mengubah apa pun! ORM atau kode apa pun yang menghasilkan SQL mengunci basis data Anda .