54

Uzun zamandır MVC kullanıyorum ve "Service" katmanını (örneğin Java web projesinde) duydum ve bunun bir gerçek mimari olup olmadığını merak ediyorum desen verilen bu konuda çok fazla bilgi bulamıyorum.MVCS - Model View Controller Hizmeti

MVCS fikri, denetleyicide olabilecek tüm iş mantığını kapsüllemek için denetleyici ile model arasında bir Hizmet katmanına sahip olmaktır. Bu şekilde, denetleyiciler yürütmeyi iletmek ve denetlemek için oradalar. Ve çoğaltma kodu olmaksızın birçok denetleyicide (örneğin, bir web sitesi ve bir web servisi) bir Servis'i arayabilirsiniz.

+1

"bu gerçek mimari model olup olmadığını merak ettik" :) Bunların hepsi: Burada

bir kod örneği En mantıklı olan soyutlamayı seçme hakkında - bu durumda MVCS, çeşitli yukarı akış veri kaynakları (veritabanı modelleri, diğer web hizmetleri, vb.) ile uğraşırken MVC'den daha kullanışlı bir soyutlama gibi görünüyor. ve özellikle de işinizi bir hizmet olarak görmeyi düşünmeye başladığınızda. Bu model, daha sonra bir REST API'sı olarak maruz kaldığım bir web uygulaması olduğunda çok fazla kodun kullanılmasına yardımcı oldu. – Joe

cevap

68

Hizmet katmanı çok çeşitli yollarla yazılabilir, ancak genellikle temel iş işleme mantığınıza sahip olduğunuz ve MVC mimarinizin altında, ancak veri erişim mimarinizin üstünde bulunduğu yerdir.

Örneğin tam bir sistemin size tabakası gibi görünebilir:

  1. Görünüm Katmanı: Sizin MVC framework seçim & kodunu
  2. Katman
  3. Servis: Sizin Kontrolör bu katmanın nesneler almak veya güncellemek için arayacak Modeller veya diğer istekler.
  4. Veri Erişim Nesneleri: Hizmet katmanınızın gereksinim duyduğu verileri almak/güncellemek için arayacağı soyutlamalar. Bu tabaka genellikle ya bir veritabanı veya başka bir sistem arayacak (örn: LDAP sunucusu, web hizmeti veya NoSQL tipi DB):

    • retreiving ve

hizmet katmanı daha sonra sorumlu olacak çeşitli veri kaynaklarından (veya veri erişim nesnelerine) 'Modelinizi' oluşturmak.

  • Değerleri çeşitli havuzlarda/kaynaklarda güncelleme.
  • vb uygulamaya özel mantık ve manipülasyonları, Sahne
  • sizin veya hizmetlerinden sönebilir sizin MVC yöntemini kullanan modeli. Hizmetinizin size verdiği sonuçları almak ve bunları ortamınıza özgü bir Model'e (örneğin: bir web sayfası) dönüştürmek isteyebilirsiniz.

    +0

    Genellikle dış erişim için servisler kullanırım. MVC tüm uygulamamın mantığını içerecek olsa da, diğer sistemlere yapılan tüm harici çağrılar için DBService veya FacebookOAuthService gibi bir şey kullanacağım. Ya da sıkı sıkıya bütünleşmekten ziyade bir üçüncü parti lib'yu sarmak, lib'leri değiştirmeyi kolaylaştırır. Benim için bu gibi hizmetler hakkında çok fazla düşünmeyi başardı. – Lex

    +0

    Buna eklemek için, Modelinizin Hizmetler katmanından daha fazlası bir Veri Aktarım Nesnesi olacaktır, bu doğrudan veya doğrudan görünümün gereksinimlerini karşılayan bir şeye dönüştürülemeyebilir veya çeviremez. – hanzolo

    8
    Google arandı ve bulunan başka nerede ve buna herhangi bir referans görmeden bu desen kendimi düşünerek olmuştu

    buradan Soru :)

    hemen her vücut bahsediyoruz ya

    hakkında gönderme yoktur

    Bugün bile

    Görünüm Denetleyici Hizmet Kalıbı.

    enter image description here

    sen bunu nasıl olması gerektiğini görmek nasıl diğer aynı düşündüğünü ve yukarıdaki görüntü olduğunu bildirmek için düşünmüştüm.

    Şu anda üzerinde çalıştığım bir projede bunu kullanıyorum.

    Yukarıdaki görüntüdeki her katmanda kendi kendinde bulunan Modül ile birlikte Modüllere sahibim.

    enter image description here

    Hizmetler katman "müşteri" yan Kontrolör istemci için ne ki "bağlayıcı" "aracı" "sunucu tarafı Kontrolör" dir, "Servis" sunucu için yapar. Başka bir deyişle, İstemci tarafı "Denetleyici", "Hizmet" aka Sunucu Tarafı Denetleyicisiyle yalnızca "görüştüğü" anlamına gelir.

    Kontrolör Hizmet katmanı getirir ya ihtiyacı sunucu tarafındaki katmanlara bilgi vermek < ----- Servis Katmanı

    den ---> İstekler ve alma.

    Hizmet kendi başına bir şey yapmaz, ancak sunucu katmanlarına ihtiyaç duydukları şeyle bağlanır. Iyi ... diğer tasarım kalıpları daha fazla değil az çok gerçek

    enter image description here

    +0

    Bu mimaride sahip olduğum tek endişe şu: DataModels'in "Görünüm" için gereksinimlerle aynı "şekle" sahip olacağını varsayarak. 1'e 1 ya da yakınsa, özellikle görünüm için bir çift özelliği sıkıştırabiliyorsunuz sanırım sorun yok, ama DataModels bir depodan tasarlandı ve bir ViewModel bir Görüş açısı – hanzolo

    +0

    "DataModels" ve "ViewModels" var, yukarıda gösterilen grafik hızlı ve kötü bir şekilde yapıldı :) – Kbdavis07

    İlgili konular