Ne iyidir: MVC veya N-Tier Mimarlık Web projesi geliştirmek?

6 Cevap php

Ben daha önce benzer bir soru sordu ve aynı zamanda bir ikna edici bir cevap var mı?

http://stackoverflow.com/questions/2843311/what-is-difference-of-developing-a-website-in-mvc-and-3-tier-or-n-tier-architectu

Bu nedenle sorunun sonuca I N-katmanlı Mimarlık projeler geliştirmeye başladı.

Sadece yaklaşık bir saat önce, ben bir arayüz oluşturmak için en iyi tasarım deseni ne olduğu hakkında, başka bir soru sordu? En olarak cevap beni MVC mimarisini kullanan var öneriyor.

http://stackoverflow.com/questions/2930300/what-is-the-best-desing-pattern-to-design-the-interface-of-an-webpage

Şimdi kafam karıştı, İlk mesaj beni hem, N-tier, katmanlı fiziksel ve mantıksal olarak ayrılmış ve bir katman yukarıda birine erişimi vardır ve bunun altında ama tüm katmanları bu sadece bir fark benzer önerdi.

Ben uygulamaları ve Web uygulamaları geliştirirken ASP.net 3 Tier mimarisi kullanılan düşünüyorum. Zend gibi çerçeveler gibi, Senfoni onlar MVC kullanmak nerede.

Ben sadece WebProject Kalkınma için en uygun bir desen sopa istiyorsun? Bu çok saçma bir karışıklık olabilir? Birisi bu karışıklığı temizlemek eğer Ama, çok minnettar olurdu?

6 Cevap

Bunlar birbirini dışlayan değil. Model-View-Controller model gerçekten bir kullanıcı arayüzü tasarımı desen, ve oldukça fiziksel katmanda daha mantıksal ilgilidir.

Ben çoğu zaman bir uygulamanın katmanları gerçek fiziksel ayrımı tanımlamak için kullanılan "n-katmanlı mimari" duymak. Örneğin, kullanıcı arabirimi, bir süreç içinde çalıştığı bir sistem, sırayla çalışan bir veri katmanı eriştiği, (belki başka bir sunucuda) başka bir işlem yürütür (belki mesajlaşma veya web hizmetleri yoluyla) bir uygulama katmanı ile veri alışverişi Henüz başka bir işlem (genellikle bir veritabanı sunucusu).

- user interface logic (zaman widget etkin olduğu gibi aksine bir n-katmanlı sistemde genellikle gelir business logic: 'uygulama mantığı' birden fazla şeyler ifade edebilir, çünkü bu açıklama, özellikle kafa karıştırıcı olabilir kullanıcı) belirli bir onay kutusunu seçer.

Örneğin, bir n-katmanlı sistemde, sunum katmanı bir öğesi kimliği kabul eden bir web hizmeti yöntemi diyebilirsiniz. Web hizmeti karmaşık hesaplamaları yapar ve bir fiyat verir, farklı bir sunucu üzerinde çalışır.

Basit bir mimaride, uygulama kullanıcı arabirimi olarak aynı süreçte öğenin fiyatını hesaplamak olabilir - fiyatlandırma mantığı (belki de kütüphane ya da çalıştırılabilir içinde), kendi logical katmana ayrılabilir olsa.

Ben onların katmanları ayrı fiziksel işlemlerde veya çalıştırmak ister bakım herhangi bir akım MVC çerçeveler düşünemiyorum.

I just want to stick to a pattern that is best suitable for WebProject Development? May be this is a very silly confusion? But if someone could clear this confusion, that would be very greatful?

Ben karışıklık iki alanda yatıyor düşünüyorum:

1) Her sorun için bir çözüm var ki varsayım.

Projenizin gereksinimi en iyi olan çözümü belirleyecektir.

2) web uygulanan MVC tanımı aslında masaüstü uygulamalarına uygulandığında daha farklıdır.

Bazıları görünümü modele konuşmak değilse, o zaman MVC olamaz söylüyorlar. Peki, web MVC uygulamaların çoğu görünümü modele konuşmak zorunda değilsiniz, ama yine de MVC denir.

Eğer kendini tarif amatör olduğundan, erken bu bir aksiyom benimsemesi gerekir: the programming world is confusing to everyone all the time.

Sen Microsoft Application Architecture Guide. Bir Mimari açıdan mevcut Microsoft teknolojileri iyi bir bakış vardır incelemek isteyebilirsiniz. Size ilgi olabilir bölümler:

  • Chp 21 Tasarımı Web Uygulamaları
  • Ek B: Sunum Teknolojisi Matrix
  • Ek C: Veri Erişim Teknolojisi Matrix

Neyin en iyi olduğunu gelince? Siz kendinizi cevap vermek zorunda. MVC, WebFormları, vb kullanarak bazı örnek projeler yapmak

Web-tabanlı MVC geleneksel masaüstü MVC çok daha farklıdır. Web (çoğunlukla) vatansız çünkü Modeli sadece Görünümü güncelleştirmek için bir yol vardır.

Eğer Görünüm bildiren Model değil, çünkü hala "gerçek" MVC olmaz Model güncellemeleri kontrol etmek sunucuyu her birkaç saniye yoklamak için AJAX kullanıldığında bile, kontrolör sürekli Modelleri "sorgulama" bulunuyor.

Öğrenilen ders gerçekten sizin mimari etiket ne önemi olmamasıdır. Genellikle insanlar sadece "MVC" battaniyenin altında götürü MVC / 3 katmanlı sadece pek çok çeşitleri vardır. Ve tüm bu web geliştirilmesi için uygundur. Ben sadece modeli aslında sunucu tarafı programlama (en azından PHP) yoluyla Görünümü bildirmek için herhangi bir pratik şekilde düşünemiyorum. Eğer bu tür bir davranış gerekiyorsa, bir masaüstü uygulaması yazılı olmalıdır. Sadece sizin için doğal ne yazmak ve terminoloji tartışmalara yakalanmak yok. CodeIgniter, Kohana, Symfony, CakePHP, Zend ve benzeri tanınmış çerçevelerin bazıları ne bakmak ve almak ve sizin gibi tasarım desenleri özellikleri veya hangi seçin.

Why not use both? At the moment I'm busy developing a project using the MVP pattern and in an N-tier architecture. I'm using the MVP pattern in the user interface project, ie. the website. All the data which needs to be shown and used in the website is passed from a webservice. This webservice is connected to a business layer (BLL), which is connected to the data access layer (DAL). The DAL is connected to the database using the Entity Framework.

So in this project I'm using them both. Using MVP instead of MVC though. This way the interface project (website) doesn't has to do hard stuff, only pass through some data which is received from the webservice. Took me a while to set up, but it works quite wonderfull.

Ayrıca, desen veya mimari iyi olduğu için gerçek bir cevabı yoktur. Tüm istediğiniz ve ne gerek bağlıdır. Eğer ölçeklenebilir olmak istiyorsanız, bir n-katmanlı mimari iyi bir çözümdür. Size oldukça kolay UI test edebilmek istiyorsanız, bir MVC deseni de iyidir. Diğer desen ve sürece bunları nasıl kullanılacağını bilmek gibi, hem de yeterli olacağını mimarileri bir ton var.

Iyi olan yoktur. MVC ve n-katmanlı ya da şeyler değildir. Bir tek sistem mimarisi, nesne / API tasarımıdır. Ikisi arasında ayrım soru sordu ve yanıtlarını burada olmuştur:

http://stackoverflow.com/questions/698220/mvc-vs-n-tier-architecture/698250#698250