Yol gösterici ilkeniz Kendinizi Tekrarlamayın :
Yazılım mühendisliğinde, Kendini Tekrar Etmeyin (DRY), özellikle çok katmanlı mimarilerde faydalı olan her türlü bilginin tekrarını azaltmayı amaçlayan bir yazılım geliştirme ilkesidir. KURU ilkesi "Her bilgi parçasının bir sistem içinde tek, açık, yetkili bir temsili olması gerekir" şeklinde ifade edilir.
ORM esasen, uygulamanız ve veri depolamalarınız arasında rahatça oturan ekstra bir katman (veya isterseniz katman). Kısıtlamalarınız, ORM veya veri depolama alanı olsun, tek bir yerde ve yalnızca bir yerde olmalıdır , aksi takdirde kısa süre içinde farklı sürümlerini kullanmaya devam edersiniz. Bunu gerçekten yapmak istemiyorsun.
Bununla birlikte, pratikte, yarı iyi ORM'lerin çoğu, veri şemanızdan otomatik olarak çok sayıda model üretir. Yine de çoğaltma olmasına rağmen, çoğaltılan ORM kodu her seferinde aynı desen izlenerek üretildiğinden bakım cehennemi olasılığı minimumdur. Yinelenen kod olmaması idealdir, ancak otomatik olarak oluşturulan kısıtlamalar bir sonraki en iyi şeydir.
Ayrıca, kısıtlamalarınızın tek bir yerde bulunması, tüm kısıtlamalarınızın aynı yerde olması gerektiği anlamına gelmez . Referans bütünlüğü kısıtlamaları gibi bazıları veri depolama için daha uygun olabilir (ancak başka bir veri deposuna geçerseniz kaybolabilir) ve bazıları, çoğunlukla karmaşık iş mantığıyla ilgili olanlar ORM'nize daha uygundur. Tüm elmaları aynı sepete koymak tercih edilir, ama…
Hataları
ORM'in başarısız olduğunu söylediniz. Bu, sorunuzla kesinlikle alakasız, uygulamanızın ORM ve veri depolama (lar) ını tek bir varlık olarak düşünmesi gerekir. Başarısız olursa, başarısız oldu, doğrudan veri deposuyla konuşmak için ORM'yi atlamak iyi bir fikir değil .
Başka bir şey için ORM'yi atlamak
Ayrıca iyi bir fikir değil. Bununla birlikte, çeşitli nedenlerle olabilir:
ORM sunulmadan önce oluşturulan uygulamanın eski bölümleri.
Bu zor bir durum ve tam olarak şu an uğraştığım durum , dolayısıyla sürekli “bakım cehennemi” tekrar ediyorum. ORM olmayan parçaları bakımını yapmaya devam edersiniz veya ORM'yi kullanmak için bunları yeniden yazarsınız. İkinci seçenek başlangıçta daha anlamlı olabilir , ancak bu sadece uygulamanızın tam olarak hangi bölümlerinin ne yaptığını ve uzun vadede tam bir yeniden yazmanın ne kadar değerli olacağına dayanan bir karardır.
Kötü tasarlanmış 2 * 10 ^ 8 satırlı MySQL tablosundaki bir anahtarı değiştirmeyi deneyin (kesinti olmadan) ve nereden geldiğimi anlayacaksınız.
Uygulamanın, doğrudan veri deposuyla doğrudan konuşması gereken eski olmayan bölümleri:
Daha hileli bile. ORM'ler süslü araçlardır ve neredeyse her şeyle ilgilenirler, ancak bazen sadece yol alırlar veya hatta kesinlikle işe yaramazlar. Buzzword (gerçekten buzzphrase) nesne-ilişkisel empedans uyuşmazlığıdır , basitçe ORM'inizin ilişkisel veritabanınızın yaptığı her şeyi yapmasının teknik olarak mümkün olmadığını ve yaptıkları bazı şeyler için önemli bir performans cezası olduğunu belirtin.
Yorumlar
Veri bütünlüğü açısından, kısıtlamalar veritabanında OLMALIDIR ve uygulamada OLMALIDIR. Uygulamanıza bir web ve masaüstü uygulamalarından, bir mobil uygulamadan veya bir web hizmetinden erişilirse ne olur? - Luiz Damim
Fazladan bir katman eklemenin son derece yardımcı olacağı yer burası ve eğer bir web uygulaması hakkında konuşursak bir REST API ile giderdim. Bunun için aşırı basit bir tasarım :
ORM, API ve veri depoları arasında oturur ve API'nın arkasındaki her şey (dahil) çeşitli uygulamalardan tek bir varlık olarak kabul edilir.