Iyi MVC, Doctrine2, Datamapper uygulama nedir?

5 Cevap php

Benim Zend Framework kurulumu ile Doctrine2 kullanarak içine arıyorum. Benim veritabanı ile benim etki modelleri ayıran başlıca çünkü gerçekten, datamapper desen seviyorum.

Benim soru benim denetleyicileri ile Doktrini ve DQL kullanmak için en iyi yöntem olan ne?

  1. controllers uses Doctrine DQL/EntityManager directly for saving/loading my domain models?

  2. create my own classes in the datamapper pattern for saving/loading my domain models, and then use Doctrine internally in my own classes?

Profesyoneller. # 1 için benim kendi datamapper modeller oluşturmak gerekmez elbette, ama yine, # 2 ile daha sonra (teoride) Doktrini değiştirebilirsiniz

Sen ne yapardın?

5 Cevap

Lütfen soyutlama Sorunuza gelince, ben gerçekten bu projenin ömrü ve nasıl taşınabilir kod olması gerekiyor bağlıdır söyleyebilirim. Minimum düzeyde bakım gereken bir tek web sitesi ise, muhtemelen size ek soyutlama katmanı vazgeçmek için biraz zaman kazanmak ve sadece kontrolörleri Doktrin kod yazmak olurdu. Eğer bu kodu yeniden farklı platformlara taşımak, ya da uzun bir süre için onu korumak için planlıyorsanız size çok daha fazla esneklik sağlayacak Ancak, ben bu soyutlama eklemek için zaman alırdım.

Hala çerçeveler araştırma yapıyorsanız, Kohana bakabilirsiniz. Temelde PHP5 için yazılmış CodeIgniter hafif bir yeniden yazma bulunuyor.

Pix0r gelen Ben ikinci tavsiyem. Bunun birçok geliştiricileri ile belki de bir potansiyel olarak uzun ömrü ile daha büyük bir proje ise ek soyutlama sadece buna değer. Bu oldukça fazla (doctrine2 ağır JPA benzer beri) doctrine2 veya JPA'lu java php olması, çok takip kılavuzdur.

Eğer ek soyutlama istiyorsanız, doctrine2 zaten imkanı ile gemi (depolar belki iş şartları ve mantığı güçlü bir odaklanma ile, çok benzer veya DAOs bile eşit) Depoları kullanmak. Bir temel sınıf Doktrini \ ORM \ EntityRepository vardır. Eğer EntityManager'a # getRepository çağırdığınız ($ EntityName) Doktrin bu varlık için bir özel depo sınıfını yapılandırılmış olup olmadığını bakacağız. Değilse, bir Doktrini \ ORM \ EntityRepository başlatır. Siz bilgilendirme kısmı açıklamalar, örneğin meta bir varlık için özel bir depo sınıfı yapılandırabilirsiniz: Varlık (... repositoryClass = "Benim \ Proje \ Domain \ UserRepository") @. Böyle bir özel sınıf EntityRepository devralan ve uygun ebeveyn kurucusunu çağırmak gerekir. Taban sınıf zaten bazı temel find * işlevselliğini içerir.

Roma

Ayrıca araştırma Symfony düşünün. Bu ORM (itmek / doktrin) kullanmanıza izin verir veya kendi veri modeli yazabilirsiniz. Ayrıca veri ilişkiyi bypass ve gerekirse doğrudan SQL kullanabilirsiniz.

1 veya 2 üzerinde ilgilenip, ben şahsen projelerde ORM ile gitmek ve ihtiyaç duyulursa bunu atlayabilir. Hiç ihtiyacınız varsa ve daha henüz symfony ile, doktrin arasında geçiş ve itmek veya kendi sınıfları olabilir.

Pros:
1) faster development. easier to maintain. generally more secure and consistent. easy to switch databases should you ever need to.(from MySQL to Oracle, etc). 

2) Faster runtime. Less dependency.

Cons:
1) Slower runtime and larger memory footprint. Dependency on other projects.
2) (reverse the pros for #1)

Düşüncelerim pix0r yanıta benzer. Proje Eğer denetleyicileri doğrudan EntityManager'a / DQL kullanabileceği kadar küçük, ancak daha sonra Doktrin 2 proje için muhtemelen overkill olduğunu ve belki daha küçük / basit bir sistem düşünmelisiniz.

Benim durumumda denetleyicisi sebat katman mantığı yazılması her zaman teknik borç şeklinde Bana uğramak için geri geldi. Bu görünüşte küçük bir karar şimdi büyük olasılıkla bile küçük projeler üzerinde gelecekte kaçınılmaz ve potansiyel olarak büyük ölçekli yeniden faktoring neden olacaktır. İdeal tekrar tekrar ve üzerinde CRUD denetleyicileri oluşturmak zorunda bizi engellemek için uygun modelleri ile yeniden son derece ince kontrolörleri kopyalayıp yapıştırmak edebilmek isterdim, ama bu kontrolörlerin özelleştirme için de izin vermek. Bence bu sadece disiplinli ve mümkün olduğunca uzakta bizim uygulamadan soyutlanmış kalıcılık katmanı tutarak suretiyle gerçekleştirilebilir. Özellikle temiz oda denetleyicisi yapmanın yükü az olduğu için, ben değil tavsiye için herhangi bir iyi bir neden göremiyorum.