2012-01-19 46 views
12

Birkaç aydır başarı ile AutoMapper kullanıyorum ama şimdi biraz tökezleyen bir blok çarptı. İhtiyacım olan şey (ya da ihtiyacım olduğunu düşünüyorum) 2 yönlü haritalama içindir. Bu, veritabanından bir öğeyi ekranda oynatmak için yüklediğimde (etki alanı nesnesi -> görünüm modeli) ve kullanıcılar söz konusu öğede değişiklik yaptığında ve onu etki alanımla eşleştirdiğinde (model -> etki alanı nesnesini görüntüle) kullanılır.İki yönlü eşlemede sorun nedir?

İki yönlü eşlemeyi işlemek için profilimde bir eşleme oluşturabildiğimi, ancak iki yönlü eşlemenin gereksiz olduğunu here okuduğumu anlıyorum. Birçok kişi, bunu yapmanın daha büyük meseleyi düzeltmemek için bir cevap olduğunu belirtmektedir (her ne olursa olsun).

Sadece neden bir kodun koktuğunu merak ediyorum?

cevap

11

Ben küçük bir dev oldugumda, temelde ne anlatmakta oldugunuzu yapan büyük bir proje üzerinde çalistim. Otomatik biçimlendirici kullanmadık, ancak temelde, görünümünüzdeki değişiklikleri doğrudan etki alanı nesnelerine aldığınızı ifade eden etki alanı nesnelerini kapsülleyen görünüm modülleri oluşturduk. Sadece değişikliklerinizi devam ettirin ve bunların olmasını istediğiniz yerde (veritabanında) bulun. Bu uygulama dört yıl önce serbest bırakılmış olmalı, ancak hala mücadele ediyorlar.

Bu neden bir koku mu? Şeyleri neden değiştirdiğin konusunda bir niyetin izini kaybediyorsun. Ve niyetiniz, uygulamanız büyüdükçe ve daha karmaşık hale geldiğinde gerçekten çok önemli olan bir şeydir. Alanınıza yeni kurallar uygulamak zor çünkü etki alanınızda gerçekleştirmek için hangi işlemlerin geçerli olduğunu görmek zor. Etki alanı modelinizi otomatik eşlenebilir yaparsanız, aynı zamanda çok anemic. Jimmy işaret ettiği gibi

, değil automapper şartlarına, etki gereklerine sonra etki alanını modellemek istiyoruz. Eğer automapper doğrudan modelinizde çalışacak olsaydı, mülk belirleyicileri genel yapmak gibi ayarlamalar yapmak zorunda kalacaktı, ancak bu alan-modelleme perspektifinden iyi bir fikir olmayabilir.

ben daha büyük bir sorun ViewModels doğrudan automapped edilebilir etki alanı modeli tatmin edici bir şekilde niyet, ne de kapsülleme iletmek olmadığını düşünüyorum. Eğer küçük bir uygulama oluştururken, o zaman aktif kayıt/veri kümesi tarzı mimari kötü bir şey olmayabilir, ama çözüm ölçekli ya da karmaşık larged olup olmadığını ViewModel gelen etki alanına haritalama daha büyük sorunları var. Üzerinde çalışıyorum geçerli uygulamasında

, biz etki alanından dto en ve ViewModels için DTO en eşleme yapmanıza automapper kullanın. Bir şey kalıcı hale geldiğinde, görüntü modülleri üzerindeki işlemi, etki alanına karşı çalıştırılan açık komutlara çeviririz. Herhangi bir büyük ölçekli uygulamada (ince veya kalın istemci) asla üç katmanlı bir mimariyi önermem.

+0

Harika cevap. Teşekkür ederim. – Nosila

+0

+1 İyi yazılmış. Daha fazla katılıyorum. –

+0

Niyet yok ise? en depo içerisindeki bir kalıcılık nesnesine ileri geri etki alanı nesnesini eşlemek istediğinizi varsayalım. Değişikliğin amacı, alan düzeyinde zaten ifade edilmiştir. Bu durumda, iki yönlü eşlemenin geçerli olduğunu düşünüyorum. – Guillaume