MVC: Tamamen doldurulmuş modeller veya Kısmen Doldurulmuş Modeller?


10

Bu beni çok uzun zamandır rahatsız etti. MVC programlama yaparken sizce daha iyi programlama uygulaması nedir? Tamamen doldurulmuş modelleri veya kısmen doldurulmuş olanları kullanmalı mı, özellikle de bu özel görev için 5 tane başka model nesnesinden sadece 2 alana ihtiyacım olacağını bildiğimde?

Bazen sadece 20 model nesnenin bir listesini veritabanından tüm değerlerle doldurmak, bunlardan sadece birkaçına ihtiyacınız olacağını bildiğinizde suç gibi görünüyor.

Tabii ki kısmi model, DAO'nuza her şeyi getiren yöntem dışında bir yöntem daha yazmanız gerektiği anlamına gelir. Hangi daha fazla kod korumak anlamına gelir?

Öte yandan, her şeyi tam olarak doldurulmuş modellerle DB'den çekmek, bir yöntemin hepsine hizmet ettiği anlamına gelir, ancak bu açıkça bazı performans yükü verecektir.

MVC programlama ve Google'ın BigTable tam modelleri gibi veritabanlarında eğilimleri tercih ORM (Hibernate veya Rails ActiveRecord gibi) görebilirsiniz eğilim kabul edilir. Peki ya hala iyi eski JDBC kullanıyorsanız?

Donanım ucuz, geliştirme maliyetli. Uygulamanın saatte birkaç yüz bin talebe ölçeklenmesi gerektiğinde bu gerçekten doğru mu?


1
"Öte yandan, her şeyi tam nüfuslu modellerle DB'den çekmek, bir yöntemin hepsine hizmet ettiği anlamına gelir, ancak bu elbette size bazı performans yükü verecek." Gerçekten mi? Bu uygulamada herhangi bir performans yükü ölçtünüz mü?
S.Lott

>> Gerçekten mi? Bu uygulamadan herhangi bir performans yükü ölçtünüz mü? << - Bunu bekliyordum. Hayır. Ancak, aksi takdirde yanlış ölçülmesi ve kanıtlanması ilginç olurdu.
Pritam Barhate

Genel giderlerin olmadığını kanıtlamak zor. Ölçümlerin bazı durumlar için geçerli olmadığını iddia eden birçok ayrıntıyı kolayca tartışabilirsiniz. "Tipik" veritabanı, uygulama dili vb. Kurulumunuzu kullanırsanız ve tercih edilen yapılandırmayı gerçek ek yüklerin ne olduğunu göstermek için tercih ederseniz , ölçümlerimizin dışında bıraktığımız çeşitli faktörler üzerinde tartışmak zorunda değiliz. .
S.Lott

1
Ben mükemmel bir makale buldum o kapakları bir DTO gönderme ve alanınız modelini açığa sorusu msdn.microsoft.com/en-us/magazine/ee236638.aspx .
Mayo

Yanıtlar:


3

İki seçeneğiniz var:

1) Modeldeki bazı alanları doldurulmamış olarak bırakın

2) Özel durumunuz için ekstra bir "lite" modeli oluşturun

Hangisini seçeceğiniz yine iki şeye bağlıdır:

a) "Tam" modelin kaç alanı yok sayılacak?

b) Bu "lite" modelin ne sıklıkla başlatılacağı

Doldurulamayan sadece birkaç veya daha fazla alan varsa, 1) ile gitmek iyidir.

Eğer b) sadece istisnai bir durum ise, sadece bir kullanım durumu için ekstra bir model oluşturmanın bir anlamı yoktur.

Başka bir yaklaşım, bir "lite" modeli tanımlamak ve "tam" modeli miras almaktır.


Cevap için teşekkürler. İhtiyaca göre hafif bir model yapmak mantıklı. Ama bazen böyle bir stratejinin çok fazla model sınıfı oluşturmayacağını merak ediyorum? Özellikle iş mantığına özgü modeller yerine görünümlere özgü modeller yapıyorsam.
Pritam Barhate

3

Görüşünüz modelden yalnızca 2 özelliğe ihtiyaç duyuyorsa, bu kullanım durumu için (muhtemelen) yanlış modele sahipsiniz! Görünüme uygun bir model oluşturmak, ekstra DB aramalarını kaydetmek ve sadece ihtiyacınız olan verileri doldurmak için bakmak istiyorum. Bir sonraki görünümün daha fazla ayrıntıya ihtiyacı varsa, sormanız gerekir, daha sonra ekstra verileri alır mıyım yoksa hepsini öne çıkarmalı mıyım ...

Alternatif olarak, bir çeşit tembel değerlendirmeye bakabilirsiniz, böylece değerler ihtiyacınız olduğunda doldurulur. Bu iyi çalışabilir, ancak açıkçası daha fazla iş ve DB çok gidiş-geliş gezilere neden olabilir, bu da çok fazla yaparsanız büyük değildir.

Bununla birlikte, temel olarak bir tablodan veya görünümden birkaç ekstra alan seçiyorsanız, o zaman ekstra veri elde etmenin maliyeti, tüm niyet ve amaçlara göre sıfırdır (Tamam, kabloda daha fazla bayt vardır, ancak en büyük maliyetler olasıdır bağlantının oluşturulması ve yırtılması için), bu yüzden eğer bir miktar ekstra veriye ihtiyacınız olacaksa , doğru modeli bulduğunuzda mutlu olduğunuzda muhtemelen modeli tamamen dolduracağım .

Donanım ucuzdur, ancak hiçbir donanım kötü bir tasarımın iyi performans göstermesini sağlayamaz.


2
>> Görüşünüz modelden sadece 2 özelliğe ihtiyaç duyuyorsa, yanlış modeliniz var! << - Her zaman takılmasına gerek yoktur. Tipik Durum, iş uygulamalarındaki arama sonuçlarının listesini göstermektedir. Örneğin bir CRM müşterisinde - çoğunlukla bir arama listesinde yalnızca ad ve bir veya 2 önemli alan gösterilir. Ancak CRM, bu müşteriyle ilişkili birkaç alana daha sahip olacaktır.
Pritam Barhate

1
Soru, bu durumda sadece 2 özelliğe ihtiyaç olduğunu söylüyor.
Steve

-2

Model bir DAO değil.

Ve başka bir şey: 20 modeliniz olduğunu (örneğin, örneğin örnekleriniz) söylüyorsanız, bu bir MVC modeli değildir. Etki alanı modeli değil tek tablo satırına doğrudan eşleme. Bunun yerine "müşterileriniz" ile yapılan tüm işlemlerden sorumlu olmalıdır.

Örneğin, "Müşteri" bir etki alanı modeli değil, yalnızca modelin içindeki bir nesnedir.

Veritabanıyla etkileşime gelince, bu sorumluluk Müşteri sınıfı örneklerinizi nasıl saklayacağınızı ve getireceğinizi bilmesi gereken bir veri eşleyici nesnesine devredilmelidir .


Not: Modelin içinde veritabanı mantığınız varsa, etki alanı iş mantığını denetleyiciye itecektir.
mefisto

1
Müşteriler için her şeyi yapan bir sınıf, bakımı zor olacağı için kötü bir fikirdir.
Andy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.