gevşek bağlı olduğunu MVC alternatif?

8 Cevap php

Ben bir PHP programcısı olarak bir web dükkanında çalışır. Bir bütün olarak siteye iyi kodlama uygulamaları ama çok değil yapısını kullanmak çoğu zaman.

Ben şimdi bizim uygulamaların bazı sıkılmaktan benim bir döneme girdi ve dışında şube ve basitleştirmek ve sadece benim için yararlı bir şekilde bazı şeyler üretmek istiyorum, ama var ofiste melez-programcı web geliştiricileri.

Bir çalışan PHP ile yazılmış bir MVC site ile bize bıraktı ve ben bunu biraz korumak zorunda, ve bunu benim şikayetleri var ama nasıl çalıştığını olsun, benim ana şikayeti sıkıca birbirine bağlıdır her bir parça ile birleştiğinde olmasıdır. Ben kaygıları ayrılığı avantajı bakın, ama bu herkes için kafa karıştırıcı olurdu ama bana koduna bakarak.

Ben siteye yeni bir sayfa eklemek için gerekirse Yani, örneğin, ben denetleyicisi güncelleştirin, sonra bir görünüm eklemek gidin, sonra bir modeli eklemek zorunda. Yeni bir sayfa yapma ad-hoc yöntem, bu yol daha basit ve bir programcı gerektirmez.

Benim yargı bu, muhafaza ziyade, bir web sitesi oluşturmak için daha iyi bir yöntem oldu.

Ben bunu sitede bir çok yerde bağımlı olmadan etkili kod yeniden verebilecek bazı tasarım desenleri olsaydı yine de, çok güzel olurdu.

Yani benim soru, çok daha gevşek bağlanır web siteleri oluşturmak ve sürdürmek için bir tasarım modeli var mı? Ben MVC hafif varyasyonlar aramıyorum, ben bakmak için oldukça farklı bir şey, eklenti yaklaşım belki bazı tip gerekir.

EDIT:

Şimdiye kadar cevaplar için teşekkürler! Koyarak farklı bir şekilde ben kod ofisimde daha iyi yapılması istiyorum. Do IA) MVC için itin veya B) yarı-programcılar gibi kafa karıştırıcı değil, bir alternatif inşa / bulabilirsiniz. Biz zaten DB bağlantısı gibi şeyler için sınıfları kullanmak ve yardım Formu. Bu sorunun noktası B'yi keşfetmek oldu

8 Cevap

Son derece yapıbozucu çünkü kod kafa karıştırıcı olan ve X yapmak için gereken kesinlikle her şey rastgele tek bir dosyada etrafında dağınık çünkü kod kafa karıştırıcı olmak arasında bir uzlaşma her zaman var.

Ikincisi ile sorun tam olarak ne yekpare modüller içine şeyler bölmek için bir "sezgisel" yoludur insanlar arasında farklılık olmasıdır. Çok fazla çürümüş ve katsayılarla kod başınızın etrafında sarmak için neredeyse her zaman daha zordur, ancak bakım yapmak kolay hem de olur bunu bir kez. Ben kimseye kafa karıştırıcı olacağını katılmıyorum ama yazar ona bakarak. Onları spot ve zamanla çevrelerindeki yapılandırılmış projeler üzerinde çalışmak için daha kolay olur, çünkü MVC gibi büyük-kapsam desenler kullanılır.

MVC kullanmanın bir diğer avantajı genellikle katman sopa yoksa sizden sonra gelen biri için korumak için uygulanması daha zor hale olmayacak olmasıdır. Şimdi yeni bir özelliği uygularken herhangi bir yönü yere önceden belirlenmiş bir yere sahip olmasıdır.

Bildiğim kadarıyla sıkı kancası kabul edilir gibi, gerçekten katmanları arasında bir bağlantı olmadan bir özelliği uygulamak olamaz. Gevşek bağlama katmanları tamamen birbirinden cahil olduğu anlamına gelmez - bu katman diğer katmanları nasıl uygulandığını habersiz olması gerektiği anlamına gelir. Örn: kontrolör katman almak ve mağaza modeli bunun için nesneleri bir veri erişim katmanı var sadece, bir SQL veritabanı kullanarak ya da sadece veri erişim katmanında veri devam ikili dosyaları yazıyoruz olsun umurumda değil. Ayrıca bunun için bazı belirlenen isimler altında bazı nesne kullanılabilir yapmak gerekir sadece, sen görünüm katmanında çiğ PHP veya Smarty kullanmak ister umursamıyor. Tüm süre görünümü tabakası bile bir denetleyici tabakası olduğunu bilmek gerekmez - data / şey / tarafından sağlanan yukarıda belirtilen isimler altında hazır gösterilecek olan denir alır sadece.

Çerçeveler şablonları gitmek gibi, ben MVC deseni bir uygulama binanın en "gevşek bağlı" yollarından biri olarak bulabilirsiniz.

Uygulamanın parçaları arasındaki arayüzler veya sözleşmeler gibi, ilişkilerin düşünün. Model View ve Denetleyicisi bu veri kullanılabilir hale getirmek için vaat ediyor. Hiç kimse tam olarak how Model yapar umurunda. Okumak ve sürece anlaşmanın sona yerine getirir gibi, activeresource gibi dış veri kaynaklarından, düz dosyaları, MySQL gibi, tipik bir DBMS yazabilirsiniz.

Kontrol View belirli veri kullanılabilir hale getirmek için, söz ve verdiği sözleri yerine getirmek için Modeli dayanır. Görünümü how Kontrolör yapar umursamıyor.

Görünüm Modelleri ve Kontrolörleri sözlerini tutacak varsayar ve ardından vakum içinde geliştirilebilir. Görünümü XML oluşturma ise Modeli ve Kontrol Onlar sözleşmelerin kendi sonuna kadar tutarak, vb XHTML, JSON, YAML, şifresiz umurumda değil.

Ve, tabii ki, Görünüm ve Denetleyici bazı şeyler var olduğunu kabul etmek gerekir. Bazı ilgili Kontrolör aktivite olmadan A View ince işe yarayabilir, ancak kullanılabilir asla olamazdı. Bile Kontrolör etmez do şey, statik sayfalarda durum olabilir gibi:

<?php
class StaticController extends ApplicationController
{

    /**
     * Displays our "about" page.
     */
    public function about ()
    {
        $this->title = 'About Our Organization';
    }
}

Sonra ilişkili Görünüm Sadece statik metin içerebilir. (Evet, ben daha önce bu gibi şeyleri hayata geçirdik. Başkası için statik bir görünüm el ve söylemek güzel "Sadece bu konuda yazıyorum.")

Eğer sözleşme veya arabirimleri gibi M, V ve C arasındaki ilişkilere bakarsanız, MVC aniden çok "gevşek bağlı" görünüyor. Tek başına PHP dosyalarının cazibesine karşı dikkatli olun. Da dahil olmak üzere ve bir yarım düzine gerektiren. Inc dosyaları, ya da daha gevşek tek tek sayfaları birleştiğinde olabilir senin ekran (genellikle HTML) ile uygulama mantığı karıştırma, ancak süreç içinde önemli unsurlardan bir karışıklık yapılmış başladığınızda.

<?php
/**
 * Display a user's profile
 */
require_once 'db.php';

$id = $db->real_escape_string($_GET['id']);
$user_res = $db->query("SELECT name,age FROM users WHERE id = $id;");
$user = $user_res->fetch_assoc();

include 'header.php';
?>
<h1><?php echo $user['name']; ?>'s Profile</h1>

<p><?php echo $user['name']; ?> is <?php echo $user['age']; ?> years old!</p>
<?php
include 'footer.php';
?>

Evet, "profile.php" ve "index.php" tamamen ilgisiz, ama ne pahasına?

Edit: düzenlemeden yanıt: MVC için itin. Sen ", yarı-programcılar" var demek ve hangi yarı emin değilim (Eğer ön-uç HTML, iyi insanlar ve CSS ama bazı programlama deneyimi ile değil sunucu tarafında? Yazarlar var mı?) Fakat bir MVC framework, onlara sadece görüşlerini teslim edebilirsiniz, ve demek "bu parçası üzerinde çalışmak."

Ben senin zaten her şablonları kullanarak beri ben gerçekten, MVC ile sorun görmüyorum söylemek zorunda. Ben tür bir uygulama yapı eklemeye çalıştığınızda doğal geliştikçe desen olarak düşünüyorum.

Insanlar ilk PHP uygulama geliştirmeye başlayacağız, kodu, genellikle büyük bir karmaşa. Sunum mantık veri tabanı mantığı ile karıştırılır iş mantığı ile karıştırılır. Insanlar genellikle almak sonraki adım çiftleşmiş yaklaşımı çeşit kullanarak başlamaktır. Bu gibi smarty gibi özel bir şablon dili içeren ya da sadece ayrı bir dosyaya sunum biçimlendirme dışarı ayıran olsun gerçekten önemli değil.

Bundan sonra çoğumuz veritabanı erişim mantığı için özel işlevleri veya sınıfları kullanmak iyi bir fikir olduğunu keşfeder. Bu gerçekten her yaygın çalıştırılan sorgu için özel fonksiyonlar oluşturmak ve dosyayı içeren bir ortak bütün bu işlevleri yerleştirerek daha başka gelişmiş olmak zorunda değildir.

Bu, tüm bana çok doğal görünüyor ve ben çok tartışmalı olduğuna inanmıyorum. Ancak, bu noktada temelde zaten bir MVC yaklaşımını kullanarak ediyoruz. Bunun ötesinde her şey sık kullanılan kod yeniden yazmak için ihtiyacı ortadan kaldırmak için sadece daha fazla veya daha az karmaşık girişimleri olduğunu.

Bunu duymak istedim sana ne olmayabilir anlıyorum, ama MVC yeniden değerlendirilmesi gerektiğini düşünüyorum. Orada uygulamaları bir sayısız, ve bunların hiçbiri sizin ihtiyaçlarınıza uygun gerçekten durum buysa, o zaman her zaman kendi ve daha temel bir uygulama yazabilirsiniz.

Bu açıdan bakın: Eğer zaten genellikle ilk düzenli PHP dosyası oluşturmanız gerekir bir şablon dili, ve sonra bir Templare dosyayı yeni bir sayfa oluşturmak her zaman kullanarak konum beri. MVC, bu daha başka gelişmiş olmak zorunda değildir, ve pek çok durumda bu değildir. Hatta gerçekten yapmanız gereken tüm veri erişimi handeling için daha sofistike yaklaşımlar araştırmak ve mevcut sisteme eklemek için olduğunu olabilir.

Eğer sanmıyorum yeni bir sayfa gerektiğinde yeni Model ve Kontrol Eylem oluşturmak zorunda olduğu gerçeği senin M, V, ve C tabakaları sıkıca bağlanmış demektir. Bu bir ayrışmıştır sisteme kaygıları ve katkıda sadece ayrılmasıdır.

O dedi, bu Royally MVC niyet kadar vida (ve böyle bir uygulama üzerinde çalıştık) ve bileşenlerin sıkıca bağlanmış make oldukça mümkündür. Örneğin, bir site, doğrudan Kontrol tabakasında 'render motoru' koymak olabilir. Bu tabii ki daha kancası eklersiniz. Denetleyici kullanmak için görünümün adının yalnızca farkında Bunun yerine iyi bir MVC dizayn edilecek ve daha sonra ayrı ayrı render motoru bu adı geçmektedir.

Gösterim URL'ler içine kodlanmış olduğunda bir MVC kötü tasarımın bir başka örneğidir. Bu Yönlendirme motorun işidir. Görünümü, yalnızca denilen gereken eylem ve eylem ihtiyacı parametresi farkında olmalıdır. Yönlendirme motoru sonra doğru URL'yi sağlayacaktır.

Zend framework çok gevşek bağlı ve çok iyi. Check it out:

http://framework.zend.com

Bu yazı çok kullanım olabilir:

http://blog.fedecarg.com/2009/02/22/zend-framework-the-cost-of-flexibility-is-complexity/

Kod Igniter deneyebilirsiniz. Onun için iyi bir yapıya kodunu vererek iken MVC öğrenmek ve kesinlikle kabul etmez çok kolay.

Kod Ateşleyici ve Kohana (CI soyundan) Tamam, ama aynı zamanda gevşek MVC vardır. Ben simple php framework gibi. Bu şekilde almaz ve size bir yapı veya karmaşık kuralları zorlamadan, önemli şeyler sağlar.

Ah ... iyi eski MVC argümanlar.

Ben çok yönlü bir PHP uygulaması, "MVC" tarzı yazılmış parçalar hangi korumak zorunda, ama hepsi değil. Daha da kötüsü, farklı bölümleri Homegrown bunların hepsi MVC, yapmanın farklı yolları var. Ve bazı sayfaları sadece hepsini kendileri yapmak.

Asıl sorun orada çerçeve kanun içinde bir çeşitlilik olduğunu ancak kodlayıcılar açıkça not nasıl soyut API'ler anlıyorum ki o değil. IMO, ths is the biggest problem with MVC frameworks. Neredeyse tüm kod ben fonksiyonlarını koymak için yerler olarak kullandığı "modelleri" ile çalışmak zorunda. Bu nightmare korumaktır.

Bu sürdürülebilir yapmak için, IME bir kaç şey gerekir:

  • Bir belirgin ve iyi tanımlanmış veri erişim katmanı, bir API sınır çok az başka kalıcı depolama ve alma ve depolama sonra görünüyor.

    Ben o tartışmalı olduğu, çünkü bunun için dönem "modelini" kullanmak için sevmiyorum. Bu katman, veri depolanan nasıl takmamalıydım bile veritabanı gibi şeyler hakkında endişe edilmemelidir çağırdığı kolları: Bu veri erişim katmanı all iştir.

  • Çok hafif ve sadece sevk dışında herhangi bir büyü yapmaz bir memuru.

Şimdi istekleri ve parametreleri kabul tek bir yerde her şeyi koyabilirsiniz, muhtemelen normalize ve dağıtıcı gelen kontrol hata, ihtiyacı (genellikle nesneler olarak) veri getirir yapması gereken değişiklikleri yapar, buna ihtiyacı verileri kaydeder Veri eller görünümüne görüntülemek için gerekmektedir. Bu adım için görev works ağır iş kod İki yüz hatları. Başka hiçbir yerde denir, başka bir dosyada fonksiyonları içine bit ayırmak gerekmez. Hatta bu dosyanın ucundaki görünümü koyabilirsiniz! İdealizm talip güzel ama çünkü this is maintainable pragmatizm bir göz-in gerekiyor.

(Okay, ... üzerinden rant)

Bir çerçeve uygulanması PHP'nin eksikliği iyi çerçeveler PHP ne yapmak demektir: Onlar yolumdan çekil. Ben çalıştığım en rahat kodu bazıları, daha sonra çıkış HTML, şablon işlevleri tarafından çevrili, üstünde tek bir require() deyimi vardı veri nesneleri (görünürde hiçbir SQL) ile tüm veri manipülasyonu vermedi Form kontrolü tutarlı bir işlev API tarafından yapılmaktadır ile.