Endişeleri ayrılması;

8 Cevap php

Benim sonraki büyük proje girişmek önce ben şu anda OO kadar okuyorum. Bazı hızlı bir arka plan vermek için, ben web uygulamaları üzerinde çalışan bir PHP geliştiricisi değilim.

Özellikle beni ilgilendiren bir alan Kullanıcı Arayüzü; Bu inşa ve "model" Benim OO bağlamak için özellikle nasıl.

I've been doing some reading on this area. One of my favourites is this: Building user interfaces for object-oriented systems

"Tüm nesneleri kendi UI sağlamanız gerekir"

my sorun hakkında düşünme, ben bu iyi çalışan görebilirsiniz. Örneğin ben, benim web sitesine oturum olan birini temsil etmek benim "kullanıcı" nesne oluşturmak. Benim yöntemlerden biri, o zaman "display_yourself" ya da benzer. Benim kod boyunca kullanabilirsiniz. Belki de bu başlamak için sadece kendi adı olacaktır. Ben kendi adını + küçük avatar göstermek ayarlamanız gerekiyorsa Daha sonra, ben sadece bu bir yöntem ve hey-saygınlık güncelleyebilir, benim app güncellenir. Ben kendi profilinde kendi adını bir bağlantı yapmak gerekirse ya, hey-presto ben bir yerden kolaylıkla tekrar güncelleyebilirsiniz.

In terms of an OO system; I think this approach works well. Looking on other StackOverflow threads, I found this under "Separation of Concerns": Soc

"In computer science, separation of concerns (SoC) is the process of breaking a computer program into distinct features that overlap in functionality as little as possible. A concern is any piece of interest or focus in a program. Typically, concerns are synonymous with features or behaviors. Progress towards SoC is traditionally achieved through modularity and encapsulation, with the help of information hiding."

Bence ben bu elde ettik. Benim kullanıcı nesne tüm bu bilgilerini gizler. Ben bunu göstermek önce $ user-> get_user_name () demek benim kodunda herhangi bir yer yok.

Ancak, bu diğer insanların "en iyi uygulama" olarak düşünmek gibi ne karşı gitmek gibi görünüyor.

Aynı soruya gelen "seçilmiş" (yeşil bir) cevabı alıntı:

"The separation of concerns is keeping the code for each of these concerns separate. Changing the interface should not require changing the business logic code, and vice versa. Model-View-Controller (MVC) design pattern is an excellent example of separating these concerns for better software maintainability."

Why does this make for better software maintainability? Surely with MVC, my View has to know an awful lot about the Model? Read the JavaWorld article for a detailed discussion on this point: Building user interfaces for object-oriented systems

Neyse ... Sonunda, gerçek noktasına alma!

1. Can anyone recommend any books that discuss this in detail? I don't want an MVC book; I'm not sold on MVC. I want a book that discusses OO / UI, the potential issues, potential solutuions etc.. (maybe including MVC) Arthur Riel's Object-Oriented Design Heuristics

Bunun üzerine dokunan (ve mükemmel bir kitap olarak iyi!), ama ben daha ayrıntılı gider bir şey istiyorum.

2. Herkes gibi MVC iyi bir fikir olduğunu açıklayan Allen HOLUB en JavaWorld makalesinde olarak iyi açıklanabilir bir argüman öne koyabilir miyim?

Bana bu konuda bir sonuca ulaşmanıza yardımcı olur herkes için çok teşekkürler.

8 Cevap

Bu kesinlikle hiçbir mantıklı ki () rectangle.draw () ve dinosaur.show gibi örnekler kullanarak, cepten genellikle öğretilen nasıl bir başarısızlık.

Eğer kendisini görüntüleyen kullanıcı sınıfına sahip bahsederken neredeyse kendi soruyu cevaplarken ediyoruz.

"Ben kendi adını + küçük avatar göstermek ayarlamanız gerekiyorsa sonra, ben sadece bu bir yöntem ve hey-saygınlık güncelleyebilir, benim app güncellendi."

Şu an için sadece bu parça hakkında düşünün. Şimdi Yığın taşması bir göz atın ve kullanıcı adınızı görünen yerlerde tüm fark. Her durumda aynı görünüyor mu? Hayır, üstünde sadece yanındaki itibar ve rozetleri ardından kullanıcı adınızı bir zarf var. Bir soru parçacığı sizin avatar altındaki itibar ve rozetleri ile adınızdan izledi var ettik. Eğer getUserNameWithAvatarInFrontOfItAndReputationAndBadgesUnderneath () gibi yöntemlerle bir kullanıcı bir nesne olduğunu düşünüyor musunuz? Nah.

Bir nesne, o verilere göre hareket temsil veri ve yöntemleri ile ilgilidir. Sizin kullanıcı nesne muhtemelen ad ve soyad üyeleri var ve bu parçaları almak için gerekli alıcılar olacaktır. Ayrıca bir boşluk ve ardından ad ve sonra soyadı gibi, ortak bir formatta kullanıcının adını dönecekti toString gibi bir kolaylık yöntemi () (Java açısından) olabilir. Bunun dışında, kullanıcı nesnesi çok başka yapmamalısınız. Bu nesne ile ne yapmak istediğine karar istemci kalmıştır.

Eğer kullanıcı nesnesinin bize verdiğim örnek almak, ve daha sonra bunu içine bir "UI" inşa eğer aşağıdakileri nasıl yapacağını düşünüyorum:

  1. Soyadına göre sıralı tüm kullanıcıları gösteren bir CSV ihracat oluşturun. Örneğin Soyad, Ad.
  2. Bir ağır GUI ve kullanıcı nesne ile çalışmak için bir Web tabanlı arayüz hem de sağlar.
  3. Tek bir yerde adı yanındaki bir avatar göster, ancak başka kullanıcı adını gösterir.
  4. Kullanıcıların bir RSS listesini sağlar.
  5. , Tek bir yerde kalın başka italik, ve henüz başka bir yerde bir köprü olarak adını göster.
  6. Uygun olduğunda kullanıcının orta baş harfi göster.

Bu gereksinimleri hakkında düşünüyorsanız, hepsi onunla ilgili olmalıdır veri ile sadece söz konusu olduğunda bir kullanıcı nesnesi sağlayan aşağı kaynatın. Herkes için her şey olmaya çalışmayın gerektiğini, sadece kullanıcı verileri almak için bir araç sağlamalıdır. O bunu kullanıcı verilerini görüntülemek isteyen nasıl karar yaratacak many görünümlerin her kadardır.

Birçok yerde görüşlerinizi güncellemek için tek bir yerde kod güncelleme hakkında fikir iyi bir tanesidir. Bu düzeyde, çok düşük bir şeylere oynayana olmadan hala mümkün. Kesinlikle "şeyler" için çeşitli ortak görüşlerini saklanması, ve görünümü kod boyunca onları kullanmak istiyorsunuz widget gibi sınıflar oluşturabilir.

İşte endişeleri desen bir MVC / ayırma kullanarak PHP web siteleri oluştururken ben almak yaklaşım:

Kullandığım çerçeve üç temel parçalar vardır:

  • Models - PHP Classes. I add methods to them to fetch and save data. Each model represents a distinct type of entity in the system: users, pages, blog posts
  • Görüntüleme - Smarty şablonları. Html burada yaşıyor.
  • Controllers - PHP classes. These are the brains of the application. Typically urls in the site invoke methods of the class. example.com/user/show/1 would invoke the $user_controller->show(1) method. The controller fetches data out of the model and gives it to the view.

Bu parçaların her biri belirli bir işi ya da "endişe" vardır. model 'ın işi veri temiz bir arayüz sağlamak için. Genellikle sitenin verileri bir SQL veritabanında saklanır. Ben dışarı veri alma ve içeri verileri kaydetmek için modeline yöntemleri eklemek

view 'ın işi verileri görüntülemek için. Tüm HTML işaretleme görünümünde gider. Veri tablosu için zebra-şeritlemesi işlemek için Mantık görünümünde gider. Bir tarih görüntülenmesi gereken biçimi işlemek için kod görünümünde gider. Bu gibi şeyler işlemek için bazı güzel özellikler sunuyor çünkü görünümleri için Smarty şablonları kullanarak gibi.

controller 'işi kullanıcı modeli ve görünümü arasında bir arabulucu olarak hareket etmektir.

Kullanıcının bu arada gelip faydaları yalan nerede nasıl bir örneğe bakalım:

Basit bir blog sitesi düşünün. Veri ana parça bir yazıdır. Ayrıca, site sonrası görülüyor sayısını izler düşünün. Biz bunun için bir SQL tablosu oluşturmak gerekir:

posts
id date_created title body hits

Şimdi en popüler 5 Mesajları göstermek istiyorum varsayalım. Burada olmayan bir MVC uygulamada görebilirsiniz ne:

$sql = "SELECT * FROM posts ORDER BY hits DESC LIMIT 5";
$result = mysql_query($sql);

while ($row = mysql_fetch_assoc($result)) {
    echo "<a href="post.php?id=$row['id']">$row['title']</a><br />";
}

Bu pasajı oldukça basittir ve eğer iyi çalışır:

  1. Size en popüler mesajları göstermek istiyorum tek yerdir
  2. Sen nasıl görünüyor değiştirmek istiyorsanız asla
  3. Eğer bir "popüler sonrası" ne değiştirmeye karar asla

Eğer ana sayfada 10 en popüler mesajları ve alt sayfaları üzerinde bir kenar çubuğu en popüler 5 göstermek istediğinizi düşünün. Şimdi yukarıdaki kod çoğaltmak, ya da görüntülenen nerede kontrol etmek için mantığı ile bir içerme dosyası koymak ya gerekir.

Bugün ne oluşturulan mesajların bir "yeni-post" sınıfı eklemek için ana sayfa için biçimlendirme güncellemek istiyorsanız?

Eğer yorum, değil hit bir yeri vardır çünkü yazılan popüler olduğuna karar varsayalım. Veritabanı, bu yansıtacak şekilde değişecektir. Şimdi, popüler Mesajları gösterir uygulamanızda her yerde yeni mantığını yansıtacak şekilde güncelleştirilmesi gerekir.

Sen karmaşıklık formun bir kartopu görmeye başlıyor. Bu işler bir projenin seyrini üzerinde korumak için giderek daha zor hale nasıl görmek kolaydır. Birden çok geliştiriciler bir proje üzerinde çalışırken Ayrıca, karmaşıklığı göz önünde bulundurun. Tasarımcı çıkışına bir sınıf eklerken veritabanı geliştiricisi danışmak zorunda mıyım?

MVC yaklaşımı benimsemek ve uygulama içinde kaygıları ayrılmasına zorlayarak bu sorunları azaltabilir. İdeal üç alanları içine dışarı ayırmak istiyorum:

  1. veri mantığı
  2. uygulama mantığı
  3. ve ekran mantık

Şimdi bu nasıl görelim:

Biz model ile başlayacağız. Biz bir $post_model sınıf var ve bunu denilen bir yöntem vereceğiz get_popular(). Bu yöntem, mesajların bir dizi döndürür. Ayrıca biz o dönmek için mesajların sayısını belirtmek için bir parametre vereceğim:

post_model.php

class post_model {
    public function get_popular($number) {
        $sql = "SELECT * FROM posts ORDER BY hits DESC LIMIT $number";
        $result = mysql_query($sql);
        while($row = mysql_fetch_assoc($result)) {
            $array[] = $row;
        }
        return $array;
    } 
}

Şimdi ana için biz controller, biz "ev" diyeceğiz var. Kullanıcının biz ana sayfa istendiğinde bizim denetleyicisi çağıran bir url yönlendirme düzeni olduğunu hayal edelim. It işi popüler mesajları almak ve doğru bir bakış onlara vermek için:

home_controller.php

class home_controller {
    $post_model = new post_model();
    $popular_posts = $post_model->get_popular(10);

    // This is the smarty syntax for assigning data and displaying
    // a template. The important concept is that we are handing over the 
    // array of popular posts to a template file which will use them 
    // to generate an html page
    $smarty->assign('posts', $popular_posts);
    $smarty->view('homepage.tpl');
}

Şimdi view neye benzer görelim:

homepage.tpl   

{include file="header.tpl"}

 // This loops through the posts we assigned in the controller
 {foreach from='posts' item='post'} 
    <a href="post.php?id={$post.id}">{$post.title}</a>
 {/foreach}

{include file="footer.tpl"}

Şimdi bizim uygulamasının temel parçaları var ve endişeleri ayrımı görebilirsiniz.

model veri alma ile ilgilidir. Bu veritabanı hakkında, SQL sorguları ve LIMIT tablolar bilir bilir. Bu güzel bir dizi geri teslim gerektiğini bilir.

controller onlar ana bakıyor ki, kullanıcının isteği bilir. Bu anasayfa 10 popüler Mesajları göstermek gerektiğini bilir. Bu model verileri alır ve görünümüne verir.

view mesajların bir dizi onlardan sonra mola etiketleri ile Achor etiketleri bir dizi olarak görüntülenir gerektiğini bilir. Bir sonrası bir başlık ve bir id olduğunu bilir. Bu yazının başlığı çapa metin için kullanılan ve mesaj id href kullanılması gerektiğini gerektiğini bilir. Görünümü de sayfada gösterilen bir başlık ve altbilgi olması gerektiğini bilir.

Her parça doesn't bildiklerini söz etmek de önemlidir.

model popüler mesaj ana sayfada gösterilir olduğunu bilmiyor.

controller ve view mesaj, bir SQL veritabanında saklanır olduğunu bilmiyorum.

controller ve model ana sayfasında yazılan her bağlantı ondan sonra bir mola etiketi olması gerektiğini bilmiyorum.

Peki, bu durumda biz veri mantık (model), uygulama mantığı (kontrolör) ve ekran mantığı (görünüm) arasındaki endişeleri net bir ayrım kurduk. Peki şimdi ne olacak? Biz kısa ve basit bir PHP parçacığını aldı ve üç kafa karıştırıcı dosyaları içine kırdı. Bu bize ne veriyor?

Endişeleri bir ayrılık sahip yukarıda belirtilen konularda bize yardımcı olabilir nasıl bakalım. Yinelemek için, biz istiyoruz:

  1. Alt sayfaların bir kenar çubuğu popüler mesajları göster
  2. Ek bir css sınıfı ile yeni mesaj vurgulamak
  3. "Popüler post" yatan tanımını değiştirin

Iki dosya bizim altsayfa ekleyeceğiz bir kenar çubuğuna popüler Mesajları göstermek için:

Bir altsayfa denetleyici ...

subpage_controller.php

class subpage_controller {
    $post_model = new post_model();
    $popular_posts = $post_model->get_popular(5);

    $smarty->assign('posts', $popular_posts);
    $smarty->view('subpage.tpl');
}

... Ve bir alt sayfa şablonu:

subpage.tpl

{include file="header.tpl"}

<div id="sidebar">

 {foreach from='posts' item='post'}
    <a href="post.php?id={$post.id}">{$post.title}</a>
 {/foreach}

</div>

{include file="footer.tpl"}

Yeni altsayfa controller altsayfa sadece 5 popüler Mesajları göstermek gerektiğini bilir. Altsayfa view altsayfaları bir kenar çubuğu div içindeki mesajların listesini koymak gerektiğini bilir.

Şimdi, ana sayfasında yeni mesajları vurgulamak istiyorum. Biz homepage.tpl değiştirerek elde edebilirsiniz.

{include file="header.tpl"}

 {foreach from='posts' item='post'}
    {if $post.date_created == $smarty.now}
        <a class="new-post" href="post.php?id={$post.id}">{$post.title}</a>
    {else}
        <a href="post.php?id={$post.id}">{$post.title}</a>
    {/if}
 {/foreach}

{include file="footer.tpl"}

İşte view popüler Mesajları görüntülemek için yeni mantık işler. controller ve model bu değişimle ilgili bir şey bilmek gerek yoktu. Bu tamamen ekran mantığı. Altsayfa liste daha önce yaptığı gibi yukarı göstermeye devam ediyor.

Son olarak, bir popüler sonrası ne değiştirmek istiyorum. Bunun yerine bir sayfa var hit sayısına dayalı olan, biz bir post var yorumların sayısına dayalı olmak istiyorum. Biz modele o değişikliği uygulayabilirsiniz:

post_model.php

class post_model {
    public function get_popular($number) {
        $sql = "SELECT * , COUNT(comments.id) as comment_count
                FROM posts 
                INNER JOIN comments ON comments.post_id = posts.id
                ORDER BY comment_count DESC 
                LIMIT $number";
        $result = mysql_query($sql);
        while($row = mysql_fetch_assoc($result)) {
            $array[] = $row;
        }
        return $array;
    } 
}

Biz "popüler sonrası" mantık karmaşıklığı artmıştır. Ancak, bir kez biz bir yerde, model bu değişikliği yaptık, yeni mantık her yerde uygulanır. Başka hiçbir değişiklik ile ana ve alt sayfa, şimdi yorumlarına dayanarak popüler mesajları gösterecektir. Bizim tasarımcı bu işin içinde olması gerek yoktu. Biçimlendirme etkilenmez.

Umarım, bu veri mantığı, uygulama mantığı ve ekran mantığı endişelerini ayıran nasıl bir zorlayıcı bir örnek sağlar, kolay uygulama geliştirme yapabilirsiniz. Bir alanda değişiklik diğer alanlar üzerinde bir etkisi daha az sahip olma eğilimindedir.

Bu sözleşmeyi takiben otomatik olarak kod mükemmel yapacak sihirli bir değnek değildir. Ve şüphesiz ayrılık olması gereken yerde çok daha az açıktır konularda karşı karşıya geleceksiniz. Sonunda, tüm uygulama içinde karmaşıklığını yönetme ilgili.

Eğer modelleri oluşturmak nasıl düşünce bol vermelidir. Arayüzlerin ne tür onlar (sözleşmelerine ilişkin Gregory'nin cevaba bakınız) verecek? Denetleyicisi ve görünümü ne veri formatı ile çalışmak için bekliyor? Vaktinden önce bu şeyler hakkında düşünmek yolda şeyler daha kolay hale getirecek.

Birlikte güzel çalışma tüm bu parçaları almak için bir proje başlatırken Ayrıca, bazı havai olabilir. Birçok model için yapı taşlarını oluşturur çerçeveler, kontrolörler, çiftleşmiş motorları, url yönlendirme, ve daha fazlası vardır. PHP MVC çerçeveler önerileri için SO birçok diğer mesajları görürsünüz. Bu çerçeveler kalkmak ve çalışan ama geliştirici olarak karmaşıklığı yönetmek ve endişeleri bir ayrılık zorlama sorumlu olan olacaktır.

Ben de yukarıda kod parçacıkları sadece örnek basitleştirilmiş olduğunu farkedeceksiniz. Onlar (büyük olasılıkla) hataları olabilir. Ancak, onlar benim kendi projelerinde kullanmak kod yapısında çok benzer.

Seni içmek wat su size yol açabilir emin değilim, ama ben senin bazı endişeleri cevap düşünüyorum.

Birincisi, MVC, modeli ve görünümü bazı etkileşim var, ama görünüm gerçekten değil uygulanmasına sözleşme bağlanmıştır. Sen aynı sözleşmeye bağlı diğer modeller için dışarı kayması ve hala görünümü kullanmak mümkün olabilir. Bunu düşünmek ve eğer, bu mantıklı. Bir kullanıcı ad ve soyadı vardır. Siz veya bir kullanıcı ne "sözleşme" Bu kravat olmayabilir olabilir rağmen O belki de, bir oturum açma adı ve bir şifre vardır. Bir kullanıcı çok değiştirmek mümkün değildir, ne olduğunu belirlemek kez noktasıdır. Sen ona bir şey eklemek olabilir, ama o sık sık götürmek için gidiyoruz olası değildir.

Görünümünde, bu sözleşme yapışır model işaretçiler var, ama ben basit bir nesneyi kullanabilirsiniz:

 public class User
 {
    public string FirstName;
    public string LastName;
 }

Evet, ben kamu alanları kötü biliyoruz. Ben de sürece ad ve soyad ortaya gibi, bir model olarak bir DataTable kullanabilirsiniz :-). Bu iyi bir örnek olmayabilir, ama gelin modeli görünümüne bağlı değildir. Görünümü bir sözleşme bağlı ve belirli bir modeli bu sözleşme için yapışır.

Ben her nesnenin duydum kendi UI olması gerekir değil. Devlet ve davranış: nesneleri iki tür esas vardır. Ben devlet ve davranışlarını hem de sahip örneklerini gördük, ama onlar genelde ben düşkün değilim çok sınanabilir değildir sistemlerinde vardır. Sonuçta, her devlet nesne, belki de, bir veri deposunda doğrudan tüm güncellemeleri işlemek, ancak kendi UI olması için BT insanları zorlama önlemek için UI çeşit maruz olmalıdır? Ben o kullanıcı ne yaptığını anlamaya çalışmak için bir açıklama yazılı görmek gerekir.

SoC gelince, şeyleri paketlemek için reasaon belirgin tüm sistemi yeniden olmadan katmanları / katman dışarı geçmek için yeteneğidir. Genel olarak, uygulama gerçekten iş katmanında bulunan, böylece parçası olarak kolayca açılamaz. Veriler ve UI iyi tasarlanmış bir sistem içinde geçiş oldukça kolay olmalıdır.

Onlar kavramları anlamada daha pratik bir yolu vardır kadarıyla OOP anlaşılması üzerine kitaplar gibi, ben, desen kitap gibi eğilimindedir. Bu web üzerinde astar malzeme bulabilirsiniz. Bir dil agnostik desen kitabı istiyorum ve biraz geeky düşünüyorsanız, Dört kitabın Gang başlamak için iyi bir yerdir. Daha yaratıcı türleri için, ben Design Patterns Heads Up söyleyebilirim.

Tüm nesneler kendilerini görüntülemek nasıl fikir ile sorun her nesne yalnızca bir şekilde görüntülenebilir olmasıdır. Eğer bir kullanıcı bir ayrıntı görünümü ve bir özet görünümü sağlamak istiyorsanız ne olur. Eğer nesneler (örneğin, kullanıcıların ve ilgili adresleri) bir dizi birleştirir bir görünümünü görüntülemek isterseniz ne olur. Bunları görüntülemek için biliyorum şeylerden iş nesneleri (kullanıcılar) ayırmak, o zaman, yazmak için daha fazla kod var sadece farklı yerlerde içine ayrı.

Bir kullanıcı nesnesi hatalı davranıyor ise, bunu düzgün görüntüleme değilse, bunu görünümü olduğunu biliyorum, bu kullanıcı olduğunu biliyorum, çünkü bu yazılım daha rahat hale getirir. (Eğer yeni bir görünüm sağlamak ve mobil tarayıcılar için hissetmek karar demek), o zaman bilen bir yeni bir nesne eklemek, tüm kullanıcı nesneyi değiştirmek için ihtiyacım yok uygulamanız için yeni bir arayüz sağlamak için gereken durum bir mobil tarayıcı için kullanıcı nesneyi işlemek için.

SOLID ilkeleri bunun için bazı iyi muhakeme sağlamak, here bu da nispeten kısa bir bakış. Ben iyi özetliyor elinde bir kitap var dont korkuyorum, ama deneyim eski kodu güncellemek için daha yeni kod yazmak daha kolay olduğunu öğretti, ve birlik birlikte fiş küçük modüler sınıflar lehine böylece tasarımlar daha ön tasarımı için ise, gerekli olanı elde etmek, uzun vadede korumak için çok daha kolay. Bu, şimdiye kadar o nesnenin iç içine dalmak zorunda kalmadan, bir kullanıcı nesnesi için yeni bir işleyici yazmak muktedir harika.

MVC iyi bir fikir olduğunu neden kimse bir argüman öne koyabilirsiniz [...] olduğunu açıklar?

Bu, birbirlerinden izole edilir çünkü ne kod hatırlıyorum yardımcı olarak aklı başında tutar.

  • Consider the amount of code that would go into that single class, if you want to expose the same info not only as Html on the UI, but as part of an RSS, a JSON, a rest service with XML, [insert something else].
  • Bu size şimdiye kadar bu verileri bilecek tek parça olacağı duygusunu vermeye çalışır, yani bir sızdıran soyutlama olduğunu, ama bu tamamen gerçeği olamaz. Eğer çeşitli harici üçüncü şahıslarla entegre edecek bir hizmet sunmak istiyoruz diyelim. Size hizmet ile entegre etmek için özel bir dil kullanmak zorlayarak gerçekten zor bir zaman olacak (bu sınıf tek parça olarak bu olabilir bunu kullanarak hiç veri), ya da diğer yandan onun bazı verilerin maruz eğer üçüncü tarafların sistemlerden verileri gizleyerek değil.

Update 1: Ben bütün makalede genel bir görünüm verdi ve eski bir yazı (99) olmak, biz nesne yönelimli vs bugün bildiğimiz MVC hakkında gerçekten değil, ne de karşı argümanlar var SRP.

Sen mükemmel dedi ne uygun olması, ve ben farklı formatlarda nesnenin kamu sözleşmesi çevirmek için sorumlu özel sınıflar ile yukarıda belirtilen senaryo ele verebilir: ana endişe biz değişiklikleri işlemek için açık bir yer yoktu ki oldu ve de biz bilgi her yerinde tekrarlanmasını istemediğini söyledi. Yani, html durumda, size mükemmel bilgi, veya html veya [burada insert yeniden mecanism] dönüşümü bir sınıf haline getiren bir kontrole sahip olabilir.

BTW, RMI bit ile bir flaş geri vardı. Her neyse, bu örnekte o bir iletişim mekanizmasından bağlıdır görebilirsiniz. O dedi, her yöntem çağrısı uzaktan işlenir. Ben onun da gerçekten yerine tek bir nesne alma ve iade bilgiler faaliyet, küçük Get çok farklı bilgi parçaları ton almak için çağrıları vardı bu kodu olan geliştiriciler üzerinde ilgili olduğunu düşünüyorum.

Ps. Ben DDD ve Katı hakkında bilgi, okumak öneririz ki ben SRP için ben yazar hakkında complaning edildi şeylerin türüdür söyleyemem dedi

Ben MVC konuda iyi bir kitap biliyorum, ama benim kendi deneyimlerinden yok. Web geliştirme, örneğin, birçok kez tasarımcıları ve bazen de DBA ile çalışır. Tasarımcı tersi kodlama ve hakkında çok gerekmez, çünkü sunum mantığı ayırmak, farklı beceri ile insanlar ile çalışmak için izin verir daha iyi ayarlar. Ayrıca, KURU kavramı için, kodunuzu daha az tekrarlayan ve korumak daha kolay yapabilirsiniz. Kodunuzu daha yeniden kullanılabilir olması ve işinizi çok daha kolay hale getirecek. Eğer daha organize olmak ve farklı bir şekilde programlama düşünüyorum çünkü aynı zamanda daha iyi bir geliştirici yapacaktır. Eğer MVC kavramları anlamak, çünkü Yani MVC olmayan bir şey üzerinde çalışmak zorunda bile, projeyi architecting için farklı bir yaklaşım olabilir.

Ben büyük siteler için MVC çerçeveler bir sürü takas bu yükü kaldırabilecek kadar hızlı olmayabilir sanırım.

Benim 2c .. söylenenleri dışında yapabileceği başka bir şey Kullanıcı nesnelerin dekoratörler kullanmaktır. Bu şekilde, decorate kullanıcı farklı bağlamında bağlı olabilir. Yani vb WebUser.class, CVSUser.class, RSSUser.class, ile bitirmek istiyorum

Gerçekten bu şekilde yapmayın, ve dağınık alabilir, ancak sizin Kanala dışında bir sürü bilgi çekmek zorunda istemci kodu kaçınarak yardımcı olur. Bu içine bakmak ilginç bir şey olabilir ;-)