Bir uygulamayı çerçevesine gevşek bir şekilde bağlamak mümkün müdür?


14

Diyelim ki bir web uygulaması geliştiriyorum. İlk tercihim PHP'yi Fat-Free Framework (F3) ve MVC deseniyle kullanmak. Gelecek yıl, Zend Framework'e, hatta ASP.NET MVC'ye geçmek istediğime karar verebilirim. Uygulamamı, çerçevesine gevşek bir şekilde bağlanacak şekilde tasarlamaya çalışmak mantıklı mı yoksa çerçeve bunu gerçekçi kılmak için çok ayrılmaz mı?

Sormamın tek nedeni, son zamanlarda bir arkadaşımla sohbet ederken ortaya çıkmasıydı, gökyüzündeki pastamı F3'e uygulamanızı gevşek bir şekilde bağlama fikrini eleştirdi.


2
Kendi uygulama kavramlarınızı soyutlayın .
Vaughan Hilts

@VaughanHilts insanları seninle aynı fikirde görünüyor ama ne demek istediğinden emin değilim. Detaylandırabilir misin?
Büyük McLargeHuge

Yanıtlar:


29

Başvurunuzu çerçevesine gevşek bir şekilde bağlamak, temel olarak bir proxy çerçevesi yazacağınız anlamına gelir. Proxy çerçevesini yazmak çok iştir ve yeni bir çerçeveye geçerseniz, proxy çerçevenin yeni çerçeveyi desteklemesi için çok fazla iş yapmanız gerekir. Tabii ki, farklı çerçeveler farklı deyimler ve desenler kullanır, bu da proxy çerçevesini çok karmaşık (her şeye uymaya çalışırsanız) veya çok sınırlı (en düşük ortak paydaya giderseniz) yapar. Her iki durumda da bu vekil çerçeve ile mücadele etmek zorunda kalacaksınız.

Tüm bu sıkıntıya değer bir heves çerçevelerini değiştirme yeteneğine sahip mi? Dediğim gibi, bir hevesle değiştiremezsiniz çünkü proxy çerçevesini ayarlamanız gerekecek, bu da uygulama kodunu doğrudan ayarlamaktan daha fazla iş olabilir.


4
"Proxy çerçevesi" terimini kullanmanız, sorunu benim için netleştirdi.
Büyük McLargeHuge

1
Bu cevaba + 1'leyin. Yeni çerçeveye yapılan yeniden kodlamanın, aynı zamanda spekülatif olan proxy çerçeve oluşturma işleminden çok daha ucuz olabileceği birçok kez var. Bununla birlikte, tüm çerçeve anahtarlamanın kesinlikle mümkün olduğunu ve 1) API ile birkaç temas noktanızın ve 2) farklı çerçevelerin API'ları arasında ortaklığın olduğu çerçeveler için mantıklı olduğunu düşünüyorum - ancak bunun kesinlikle olmadığını iddia ediyorum. ortak durum.
J Trana

5

Yapamaz.

Çerçeveler arasında taşınabilir bir şekilde tasarım yapabilirsiniz . MVC MVC'dir ve hangi dil veya platform kullanılırsa kullanılsın, ilkeler kabaca aynıdır.

Bununla birlikte, gerçek kod çok çerçeveye veya dile bağlı olacaktır. Kendinizi bundan soyutlamanın tek yolu, ara bir çerçeveye dayalı olarak kod yazmak olacaktır. Daha sonra uygulamayı değiştirmeden ara uygulama değişikliğine (F3'ten .NET?) Sahip olabilirsiniz. Bu çok fazla iş, sızdıran soyutlamalar varsayar ve sorunu çözmeden hareket ettirir: şimdi ara çerçevenize bağlısınız.

Daha olumlu bir not: bazı testlerinizi (BDD stili) uygulamanızdan bağımsız bir platformda ifade etmeyi düşünün. Bunlar büyük yeniden yazmalardan kurtulabilir.


PHP'den .NET'e geçmek muhtemelen belirttiğiniz gibi gerçekçi değildir. Çok yüksek, soyut, muhtemelen berrak bir seviyede düşünüyorum.
Büyük McLargeHuge

5

Bir keresinde Robert C. Martin'in bir konuşma yaptığını gördüm.

Bu yüzden tavsiyem, henüz ne kullanmak istediğinizden tam olarak emin değilseniz, bu kararı ertelemeye çalışmaktır. Şimdi tanımlayabileceğiniz ve hangi çerçeveyi kullandığınızdan kolayca bağımsız kalacak parçaları belirleyin.


Bu gerçekten iyi bir tavsiye!
Büyük McLargeHuge

5

Çerçeve kilitleme ciddi bir sorun olabilir, ancak soruna taşınabilirliğin biri olarak bakılmasına yardımcı olur. Taşınabilirlik mutlak bir özellik değildir, ancak başlangıç ​​noktanıza ve nereye gitmek isteyebileceğinize bağlıdır. Benzer şekilde, yazılım yalnızca başka ortamlara taşıdığınız sürece taşınabilir.

Bir çerçeve içindeki bir uygulamanın geliştirilmesinin çoğu, çerçevenizin bileşenlerini birbirine bağlayan şeyler olan tutkal kodu olma eğilimindedir. Yapılandırma dosyaları bazı sistemlerde tutkalın belirli bir miktarını soyutlayabilir, ancak çok sayıda ince ayrıntı kodda yapılmalıdır.

Öte yandan, iş kuralları ve süreçleri uygulamadan soyutlanabilir. Soyutlamanın zor kısmı, kuralların doğrudan çerçeve tarafından uygulandığı zamandır; güvenlik, erişilebilirlik ve süreç sıralaması çerçeveniz tarafından uygulanmaya meyillidir ve görülmesi en zor olanı olabilir.

Başvurunuzun tutkal kısmını iş kuralı, iş süreci ve iş verileri bölümünden ayırabilirseniz, çözümünüzün bazı bölümlerini taşınabilir hale getirebilirsiniz.


+1. Bir (web) hizmetinde iş mantığınızı ayıklayarak, herhangi bir uygulamanın onu tüketmesine izin vererek PHP MVC uygulamasını iş mantığınıza yalnızca bir web GUI'sine indirgeyerek bir bütün olarak değiştirmeyi kolaylaştırabilirsiniz.
CodeCaster

Bir web hizmeti tasarlamak, kendi çerçevenizi tasarlamaya benzer. Ayrıca, özellikle bilgi mühendisliği bölümü olmak üzere iş kurallarınızın önemli bir kısmının GUI'de yapılandırılması gerekir.
BobDalgleish
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.