Nerede ilk veritabanı odaklı Web App geliştirme (uzun bir soru) ile başlamak için?

5 Cevap php

Ben bir veritabanı tabanlı web uygulaması geliştirmek için karar verdik, ama nereden başlayacağınızı emin değilim. Projenin nihai hedefi üç yönlüdür:

  1. yeni teknolojiler ve uygulamaları öğrenmek için,
  2. nasıl bir hantal bir ağ klasör yapısı yayılmış ofis belgeleri gibi şirket mağaza erişmek ve korumak için konsolide ve daha kolay yapılabilir bu bilgi ve gösterecek yönetimine istenmeyen demo teslim
  3. Test sınıf diyagramları yoluyla geliştirme ve prototip Driven nasıl benim co-işçi göstermek çok yararlı olabilir ve gelecekteki bakım baş ağrısı azaltır.

Ben aşağıya bakın, bu ben özellikleri bir dizi yarattı hangi temel CMS olmak biter düşünüyorum.

  1. (A 'projesi group'-> proje yapısı ile bir ağaç olarak organize) site yapısını saklamak için bir veritabanı oluşturun.
  2. Veritabanından site yapısını çekin ve temel ön uç teknolojilerini kullanarak bir ağaç olarak gösterilecek.
  3. Site yapısını değiştirmek için yönetici ayrıcalıkları / araçları ekleyin.
  4. Auto create required sub pages* when an admin adds a new project.
    4.1 There will be several sub pages under each project and the content for each sub page is different.
  5. okumak ve alt sayfalara yazma ayrıcalıkları atamak için kullanıcı ayrıcalıkları ekleyin.

Ne yapmak istiyorum, bu projeyi geliştirmek için benim sürecinin bir parçası olarak Test Driven Development ve sınıf diyagram kullanmaktır. Benim sorunum; Ben nereden başlayacağınızı emin değilim. Ben Birim Testi ve UML okumaya, ama asla pratikte onları kullandık. Ayrıca, nasıl modeller ve test birimleri içine bu öğeleri birleştirmek için, önce veritabanları ile hiç çalışmamış olan?

Uzmanlık için şimdiden teşekkür ederiz.

5 Cevap

Ben nereden başlayacağınızı emin değilim.

Biz her zaman veri modeli ile başlar.

having never worked with databases before, how to I incorporate these items into the models and test units?

Ah, evet, bir sorun var.

Her şey veri ile başlar, çünkü veri ile başlamak zorunda.

  1. Kullanım durumları yazın. Bir sistem ile etkileşime hiçbir Aktör var çünkü 5 teknik şartları gerçekten çok iyi kullanmak olaylar değildir. Aktör ile etkileşime ne - Sen bir aktör yapar şeyler yazmak gerekiyor.

  2. Aktör ile etkileşim nesneleri tanımlamak. Şüphe, sizin kullanım durumları tüm isimler yazarken.

  3. Bu nesneleri uygulayacak sınıfların bir resim çizin.

  4. Aktör yapması gereken her şeyi sınıf tanımları niteliklerine dayanarak emin olmak için kullanım durumları üzerinden yürüyün. Bir aktör ihtiyacı tüm veriler veritabanında tablolar olacak bu sınıfların, olmak zorundadır.

Şimdi, daha fazla teknik işi başlatmak zorunda. Sen bir ORM katman ile bir web çerçeve gerekir. PHP kullanarak konum, bu yüzden bunun için iyi bir çerçeve bulmak gerekecek. Kek veya Doktrin falan.

  1. ORM tabakasında bir sınıf tanımlayın. Eğer tam veya kesin olmak zorunda değilsiniz, sadece sizin ile test edebilirsiniz şey gerekir.

  2. Bu doğru veri elemanlarını sahip olduğundan emin olmak için, bu sınıf için birim testleri yazmak. Bireysel veri sınıfları basit başlayacak çünkü bu, ilk başta nispeten basit olacaktır.

Sınıfların temel set tanımlanır sonra, sınıflar arasındaki ilişkilere bakmak gerekir. Gerçek iş başladığı yerdir.

  1. Lütfen resimde bir ilişki bakmak. Herhangi bir hat. Rastgele birini seçin.

  2. Eğer bu çizgi boyunca "gezinmek" emin olmak için birim testleri yazmak. Bir nesneden, hattın diğer ucundaki ilgili nesneleri getir. Bu kod sadece birkaç satır çok karmaşık olmamalıdır.

  3. Bir veritabanına yükleyebilirsiniz test verileri - - nesneleri ve onların ilişkilerini göstermek için "fikstür" oluşturun.

  4. Testini çalıştırın. Kırılırsa, ORM tanımları düzgün navigasyon desteği güncellemek.

Tüm çeşitli ilişkileri yapıyor bitirdiğinizde, bir Test-Driven şekilde makul tam bir veri modeli inşa olacaktır.

Şimdi modeli nesneler için PHP sunum oluşturabilirsiniz.

Ben bir kerede çok fazla kapmak için çalışıyoruz his var. Bu veritabanları, TDD ve UML diyagramlar ile deneme gayet iyi; kendi içinde IMHO tek bir proje için yeterli olacaktır. Bu ilk deneysel proje, size bir sonraki proje üzerinde çok daha iyi bir iş yapmak mümkün olacak dayalı bir sürü öğretecektir. Ama TDD almak için diğer geliştiriciler ikna sonuçları getirmek için bu ilk deneyin istemem ve / veya yönetim düşünce yolunu değiştirmek için. Eğer makul başkalarına bunları açıklamak için önce, ilk olarak kendinizi şeyleri anlamak ve deneyim gerekir.

Birim test DB uygulamalar hakkında tavsiyeler için, yeni başlayanlar için bu konuları bakın:

Sana "sınıf şemalar aracılığıyla prototip" ile ne demek emin değilim. Sınıf diyagramları diğer geliştiriciler için tasarım iletişim / tartışılması için iyi, ve kesinlikle her iyi geliştirici araç olmalıdır. Biriyle bir beyaz tahta oturumu, eskiz ve anında tasarım öğeleri silme tasarım ve bunu etkileyen güçlerin açıklığa kavuşturmak için harika bir yoldur. Ancak, IMHO bu sadece çok geniş anlamda "prototip" dir. Benim için gerçek bir prototip kodu - Bu tasarım gerçekten pratikte işler olup olmadığını doğrulamak için tek yoldur.

Öncelikle herhangi bir web uygulaması omurgası veritabanı. Ben basit başlangıç ​​veritabanı tasarımı yukarı yapıyor ve sonra bunları işlemek için bir model ve görünüm sınıfları yazmaya öneririm. İkinci olarak, aklınızda hedefleri (alt sayfalar, ağaç yapısı) ile DB tasarım gerekir ama hata yapmaya korkmayın. Biz normalleşme ya da bir nesne ilişkisel modeli kullanmanın yararları hakkında size matkap olabilir ama şahsen olanlar için gerek görmüyorum, eğer kavramları içselleştirmek için zor olacak.

Eğer DB modeli ve görünümü sınıfları test olarak TDD, ilk günden itibaren kullanılabilir. UML Ben yardımcı olurdu emin değilim - eğer mümkünse sadece sırası, sınıf ve işbirliği diyagramları için sopa.

Birim test DB kullanarak için somut bir cevap - kurulum sırasında kukla satır eklemek ve devrelerde aşamalarında bunları kaldırın. Sen test sonrasında bir DB "temizlemek" için bir PHP komut dosyası yazmak isteyebilirsiniz.

Bu yardımcı olur umarım!

Ne yapmak istiyorum, bu projeyi geliştirmek için benim sürecinin bir parçası olarak Test Driven Development ve sınıf diyagram kullanmaktır.

Bu tasarım 2 farklı yaklaşımlar vardır - Eğer birini seçmek gerekir. TDD davranışları ve testlere dayanan tasarım sürücüler. UML BDUF (Büyük Tasarım Ön Up) kullanılacak eğilimindedir - sadece gayrı "tasarım" bir parçası olmadan Devs arasında iletişim kurmak için kullanılabilir olsa. Alt çizgi, olsa - Eğer yazılım tasarımı istiyorum nasıl karar vermeniz gerekir olduğunu. Benim için, ben genellikle bir TDD yaklaşım ile daha rahat değilim - ama (ben UML kullanmayın olsa) iyi bilinen bir etki alanı için, ben yerine BDUF oturum yapabilir.

Benim sorunum; Ben nereden başlayacağınızı emin değilim. Ben Birim Testi ve UML okumaya, ama asla pratikte onları kullandık.

Sen konuşuyorsun varsayarsak [T | B] DD, ve "birim test" - Eğer uygulama için gerekli davranışları ispat testler ile başlar. DD rota, ben muhtemelen tamamen UML atladığınız | Eğer [B T] giderseniz. Aksi takdirde, sadece bittiğinde UML jeneratör çalıştırmak ve size bazı güzel fotoğraf yapacağız. ;)

[TestFixture]
public class WhenAddingNewProject {
    [Test]
    public void SubPagesAreCreated() {
       var p = Project.Create("MyProjectGroup\\MyTestProject");

       Assert.IsGreaterThan(p.SubPages.Count, 0);
    }

    [Test]
    public void FirstSubPageIsWikiPage() {
       var p = CreateProject();
       var subPage = p.SubPages[0];

       Assert.AreEqual(subPage.Title == "MyTestProject Wiki");
       Assert.IsTypeOf<WikiSubPage>(subPage);
    }

    [Test(ExpectedException := typeof(SecurityException))]
    public void DefaultsToAdministratorPrivileges() {
       var p = CreateProject();

       var u = User.Login("testuser", "testpassword"); 
       Assert.IsNotNull(u);
       Assert.AreEqual(UserRole.User, u.Role);

       p.Delete();
       Assert.Fail();
    }

    private Project CreateProject() {
       return Project.Create("MyProjectGroup\\MyTestProject");
    }
}

Ayrıca, nasıl modeller ve test birimleri içine bu öğeleri birleştirmek için, önce veritabanları ile hiç çalışmamış olan?

Sen yok. Eğer veritabanı isabet eğer tanımı gereği, - bir entegrasyon testi değil, bir birim test yapıyoruz. Ünite testleri için, dışarı soyut veritabanına istiyorum ve sahte / yerine / görmezden. Veritabanı dışarı mantığını alarak, ayrı test edebilirsiniz - (? Sağa, bir ORM kullanarak) sonra sadece veri yükleme kaydını / tasarruf test etmek gerekir.

Benim önerim ASP.NET MVC ile başlamak olacaktır. Bir veritabanı ile basit bir web sitesi yapı üzerinde çok iyi bir örnek var.

Burada daha fazla bilgi için bak: Nerd Akşam Yemeği (Ücretsiz indirin)

http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf