MVC: Model ve hizmet arasındaki fark nedir?


15

Neden bazı çerçevelerde mantık katmanı "Model", bazılarında ise "Servis" olarak adlandırılır. Birbirlerinden farklı mıdır yoksa sadece adlandırma kuralları ile mi farklıdır?


GÜNCELLEME 1

Sormamın nedeni, klasik bir MVC çerçevesi olan Zend Framework'te herkes Model kavramını kullanıyor. Şimdi AngularJS öğreniyorum ve Model kelimesi kayboldu ve yerini servis kelimesi aldı.

Ne fark bir hizmet daha çok tekrar tekrar kullanılabilen bir singleton gibi (örnek: bir REST istemcisi) iken bir model daha MVC desen denetleyiciden gelen veri manipülasyonları ile ilgilidir.


Araştırmanızı paylaşmak herkese yardımcı olur. Neyi denediğinizi ve neden ihtiyaçlarınızı karşılamadığını bize bildirin. Bu, kendinize yardımcı olmak için zaman ayırdığınızı gösterir, bizi açık cevapları tekrar etmekten kurtarır ve en önemlisi daha spesifik ve ilgili bir cevap almanıza yardımcı olur. Ayrıca bkz. Nasıl
Sorulur

Shakespeare'i yorumlamak için: bir adda ne varsa, başka bir adla bir gül hala bir gül. Uygulama modeliniz bir hizmet olarak iyi bir şekilde uygulanabilir.
jwenting

Yanıtlar:


22

Model: Nesneye ait alanlar, nesneden veri almasına / ayarlamasına yardımcı olan yöntemler (ad + soyadı döndüren bir tam ad erişimcisi)

Servis: Bir veya daha fazla modelle işlem gerçekleştirme yöntemleri, bkz. 'İş birimi', işlemler vb.


Employee :: create yalnızca bir veri kümesi almalı, gerekirse model doğrulaması yapmalı ve bir Çalışan Nesnesi döndürmelidir.

EmployeeService :: hireEmployee çalışanı oluşturabilir, onlara hoş geldiniz e-postası gönderebilir, posta kutusu oluşturabilir, sandviç yapabilir, vb ... veri kümesini veya sonuç kodunu vb.


Bu aynı zamanda doğrulamayı da etkileyebilir:

Model Doğrulama: Çalışanın kimliği, adı ve soyadı ve doğum günü olmalıdır

Servis Doğrulaması: Barmen pozisyonu için çalışanlar 21 yaş ve üzeri olmalı ve bir yönetici tarafından onaylanmalıdır.


Gerçek kelime iş mantığının ne kadar karmaşık olabileceğini ve bu nedenle neden ekstra bir hizmet katmanının model katmanından ayrı yardımcı olabileceğini gösteren çok somut bir örnek için teşekkürler.
wlnirvana

3

Deneyimlerime göre , MVC tasarım deseni içindeki Model katmanı , veri manipülasyonu ile ilgili her yazılım bileşenine (POJO'lar, DAO, SQL, JDBC vb.

Hizmet katmanı aslında MVC'ye ek olarak:

Model katmanı bileşenlerinin Controller katmanının içine çağrıldığını biliyoruz . İkincisi inşa edildiğinde, kısa ve özlü görünmediğini fark edersiniz (kirli kodla dağınık); Denetleyici ekstra ayrıntılar sağlayamayabilir (örneğin, bunları tüketecek bir DAO yöntemini çağırmadan önce istek parametrelerini biçimlendirmek ...). Bu nedenle, bu ek katmanı, yani Hizmet katmanını ekleyebilirsiniz.

Sonunda, kirli kodunuzu, sentetik bir Denetleyici katmanının sonucu olacak anlamlı bir ad, parametreler vb. İle statik yöntemlerin içine alabilirsiniz.

Bu bağlantıya bir göz atın:

/programming/2762978/the-purpose-of-a-service-layer-and-asp-net-mvc-2


1
Servis katmanını da tam olarak böyle görüyorum. Ancak, daha sık olmamakla birlikte, iş modeline harici API sunmak için kullanıldığını görüyorum. Her iki senaryo da geçerli. Burada mesele sadece isimlendirme çatışması.
burntblark

2

Yapısal olarak bu temel sınıflar aynıdır, ancak MVCS uygulamasının Hizmet ve Model katmanlarının farklı endişelerini sınıflandırmak için kullanılırlar.

Service:- A concrete service class defines the API of an external Service.

Model :- Defines the API of the applications data model.

Dolayısıyla, temel sınıflar birbirine benzemekle birlikte, bu temel sınıfları genişleterek oluşturulan somut sınıflar tamamen farklı iki amaca hizmet eder.

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.