İlişkisel bir veri tabanına nesne yönelimli bir açıdan yaklaşmaya çalışırken, oldukça büyük ve çeşitli bir dizi kavramsal ve teknik zorluk vardır. Bu zorluklar topluca nesne-ilişkisel empedans uyumsuzluğu olarak bilinir ve ilgili Wikipedia makalesi son derece bilgilendiricidir. Makale epeyce tanımlıyor, onları burada tanımlamanın mantıklı bir yolunu görmüyorum. Size genel bir fikir vermek için, bunlar aşağıdaki gibi kataloglanır:
- uyuşmazlıklar
- Nesneye yönelik kavramlar
- Veri tipi farklılıkları
- Yapısal ve bütünlük farklılıkları
- Manipülatif farklılıklar
- İşlem farkları
- Empedans uyumsuzluğunu çözme
- minimizasyonu
- Alternatif mimariler
- tazminat
- çekişme
- Felsefi farklılıklar
Bence makaleyi okumak için zaman ayırırsanız, ORM'nin bazen bir anti-patern olarak tanımlandığı gerçeğinin kaçınılmaz olduğunu anlayacaksınız. İki alan öylesine farklıdır ki, birini diğerine muamele etmeye yönelik herhangi bir yaklaşım, varsayılan olarak bir anti-patern olduğu gibi, bir anti-paternin bir alan felsefesine aykırı bir patern olduğu anlamına gelir.
Ancak, terimin esasen iki büyük alan arasında bir köprü görevi gören hiçbir şeye uygulanmaması gerektiğini düşünüyorum. Bir kalıbı anti-kalıp olarak etiketlemek, yalnızca kendi alanı içinde anlamlı olur. Öyleyse, bunun bir anti-kalıp olup olmadığı sorusu alakasız.
Ama yararlı mı? Evet ORM, orada en kullanışlı anti-paternlerden biridir. Neden sadece kendinizi bir projede veritabanlarını değiştirmek zorunda kalacağınız pratik bir durumda bulursanız anlayacaksınız. Hatta aynı veritabanının başka bir sürümüne bile yükseltebilirsiniz. ORM, bunlardan biridir, ancak gerçekten ihtiyaç duyduğunuzda tamamen anlarsınız.
Ders dışı, her şey faydalı olduğu için, ORM kötüye kullanma eğilimindedir. Eğer bir şekilde üzerinde çalıştığınız veritabanı hakkında her şeyi bilme ihtiyacının yerini aldığını düşünüyorsanız, o zaman geri gelip sizi ısırır. Zor.
Son olarak, bana utanmadan takmanıza izin Cevaplarımı başka bir ilgili ile ilgili, "ActiveRecord desen KATI tasarım ilkelerini teşvik / takip ediyor mu?" Bana göre bu, "bu bir anti-patern" midir? den çok daha alakalı bir sorudur.