SORU
30 Aralık 2010, PERŞEMBE


Nerede&; iş mantığı katmanı " " MVC uygulama için uygun mu?

Kimseyi kandırmak çığlıklar önce, zor zamanlar basit bir başlık özetleme vardı. Bir başka başlık "etki alanı modeli ve MVC modeli" ya da "model Nedir?"? arasındaki fark Nedir diye

Kavramsal olarak, veri görünümleri ve kontrol ünitesi tarafından kullanılmak üzere bir Model anladığım kadarıyla. Bunun ötesinde, modeli oluşturan, üzerinde farklı görüşler büyük bir anlaşma gibi görünüyor. Etki alanı modeli, uygulama, bir model versus, vs vs.. model, vs bir hizmet modeli, görünümü

Son bir soru, örneğin, depo desen sordum, nokta depo modelinin bir parçası olan boş olduğu söylendi. Ancak, modeli, süreklilik modeli ve iş mantığı katmanı ayrılmış olması gerektiğini diğer görüşleri okudum. Sonuçta, Depo desen modelinden beton kalıcılık yöntemi ayrıştır değil miydi? Diğer insanların Etki alanı modeli ve MVC model arasında bir fark olmadığını söylüyor.

Basit bir örnek alalım. Bu AccountController bu MVC varsayılan proje ile birlikte gelir. Okudum çeşitli görüşler Hesap Kodu bulunan kötü tasarım, ihlal SRP, vs.. vs.. Eğer bir tasarım "uygun" Üyelik modeli için bir MVC uygulama, nedir o?

Nasıl ASP.NET hizmetleri (Üyelik sağlayıcısı, rol sağlayıcı, vb.) modelinden ayrı misin? Ya sen hiç?

Gördüğüm kadarıyla, modeli", belki de doğrulama mantığı ile.. ama iş kuralları (doğrulama dışında). ayrı olması gereken "saf ve temiz Örneğin, diyelim ki birisi yeni bir kullanıcı hesabı oluşturulduğunda, e-postayla olmalıdır diyor bu iş bir kural mı var. Bu gerçekten benim görüşüme göre modele ait değil. Nereye ait?

Herkes bu konuda herhangi birşey hatırlatıyor mu?

CEVAP
30 Aralık 2010, PERŞEMBE


Ben yaptım şekilde ve doğru ya da yanlış olduğunu söylemiyorum, benim görüşüm ve benim görüşüme göre uygulanan bir model o zaman. Bu model sadece benim görüşüm - veri açıklama ve doğrulama kuralları dahil olmak üzere ilgili ne var. Kontrolör tek model bina için mantık evler. Tüm iş mantığını barındıran bir servis katmanı var. Benim kontrol benim hizmet katmanı Ara. Bunun ötesinde bir depo benim katman.

Benim etki alanı nesneleri ayrı ayrı (kendi proje, aslında) sahiptir. Kendi veri açıklama ve doğrulama kuralları var. Benim depo veritabanına kaydetmeden önce benim etki alanı nesneleri doğrular. Benim etki alanı içinde her nesne doğrulama yerleşik olan temel sınıfından miras aldığı için, benim depo genel ve her şeyi (ve temel sınıf devralan gerektirir) doğrular.

Modelleri iki takım olan kod tekrarından olduğunu düşünebilirsiniz, ve bir ölçüde. Ancak, etki alanı nesne görüntülemek için uygun değil, çok mantıklı bir durum vardır.

Mesela kredi kartları ile çalışırken bir ödeme işlerken bir cvv ihtiyaç var, ama cvv (bunu yapmak için 50.000 dolar para cezası) mağaza edemem. Ama, ben de senin kredi kartını Düzenle - Adres, isim, ya da son kullanma tarihi değiştirmek mümkün olmak istiyorum. Ama bana numarasını veya düzenlerken cvv vermek için gidiş değildir, ve kesinlikle sayfasında düz metin olarak kredi kartı numaranızı koyacak değilim. Benim domain onları bana ver, çünkü bu değerler, yeni bir kredi kartı kaydetmek için gerekli olan, ama benim modelini bile kart numarası veya cvv içermez düzenleyin.

Çok katmanları için başka bir yararı da, eğer doğru şekilde tasarlandı, structuremap ya da başka bir IoC konteyner kullanımı ve zararlı bir uygulama etkilemeden adet takas olabilir.

Benim görüşüme göre, kontrolör kod sadece manzarayı kodu hedef olmalıdır. Bu, bu, vb gizlemek. Servis katmanı uygulaması için iş mantığı evi. Kolay bir iş kuralı değiştirmek tweak bu yüzden tek bir yerde hepsini sahip olmak isterim. Depo katmanı nispeten aptal - iş mantığı yoksun olması ve sadece veri ve sorgu etki alanı nesneleri dönmelidir. Etki alanı modelinden görünüm modelleri ayırarak, özel doğrulama kuralları konusunda çok daha fazla esneklik var. Ayrıca gizli alanları görünümü veri her parça dökümü ve ileri geri istemci ve sunucu (veya arka uç üzerinde yeniden inşa) arasında gitmene gerek yok demektir. Görünümü model olacak o zaman evde sadece bilgi ilgili görünümü - özelleştirilebilir gerek bools için Görünüm mantık ya sayar ya çeteleler, görünümü kendisi değil kalabalık ile karışık mantık ifadeleri gibi

<% if (!String.IsNullOrEmpty(Model.SomeObject.SomeProperty) && 
    Model.SomeObject.SomeInt == 3 && ...) { %>

Her şey genişledi ve katmanlı görünüyor olsa da, bu şekilde tasarlanmış olmasının bir nedeni var. Mükemmel mi? gerçekten değil. Ama kumanda dan depoları arama ve iş mantık denetleyici karışık, Depo ve model olması, son tasarımları tercih ediyorum.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS

    ASUS

    22 EKİM 2005
  • martin shervington

    martin sherv

    7 EKİM 2011
  • Matt Stokes

    Matt Stokes

    22 Ocak 2008