Yanıtlar:
Cevaplamak için çok geç kaldım. Ancak, sadece bugün düşündüğüm bir örneği paylaşmak istiyorum. Size 5m x 5m boyutlarında bir kağıt kesmenizi söyleseydim, kesinlikle bunu yapardınız. Ama sizden aynı boyutlarda 1000 adet kağıt kesmenizi rica ediyorum. Bu durumda, 1000 kez ölçüm yapmazsınız; Açıkçası, 5m x 5m'lik bir çerçeve yaparsınız ve bunun yardımıyla 1000 parça kağıdı daha kısa sürede kesebilirsiniz. Yani, yaptığınız şey belirli bir görev türünü yapacak bir çerçeve yapmaktı. Aynı tür uygulamalar için aynı tür görevi tekrar tekrar yerine, tüm bu olanakları tek bir pakette bir araya getirerek, uygulamanız ve daha da önemlisi birçok uygulama için soyutlamayı sağlayan bir çerçeve oluşturursunuz.
Teknik olarak, bir çerçeveye ihtiyacınız yoktur . Gerçekten çok basit bir site yapıyorsanız (1992'de web'i düşünün), hepsini sabit kodlu HTML ve bazı CSS ile yapabilirsiniz.
Ve eğer modern bir web uygulaması yapmak istiyorsanız, bunun için de bir çerçeve kullanmanız gerekmez .
Bunun yerine, ihtiyacınız olan tüm mantığı her seferinde yazmayı seçebilirsiniz. Kendi veri kalıcılığı / depolama katmanınızı yazabilir veya - çok meşgulseniz, her bir veritabanı erişimi için özel SQL yazmanız yeterlidir. Kendi kimlik doğrulama ve oturum işleme katmanlarınızı yazabilirsiniz. Ve kendi şablon oluşturma mantığınız. Ve kendi istisna işleme mantığınız. Ve kendi güvenlik fonksiyonlarınız. Ve hepsinin iyi çalıştığından emin olmak için kendi birim test çerçeveniz. Ve kendiniz ... [oldukça uzun bir süre devam ediyor]
Eğer varsa Sonra tekrar, yapmak bir çerçeve kullanmak , genellikle, iyi faydalanmak mümkün olacak hakemli ve çok iyi onlarca iyi senden daha iyi olabilir diğer geliştiriciler, değilse bile yüzlerce çalışmalarını test etti. Yukarıda listelenen altyapı öğeleri hakkında çok fazla endişe duymadan zaman harcamak zorunda kalmadan, istediğiniz şeyi hızlı bir şekilde oluşturabilirsiniz.
Daha kısa sürede daha fazla iş yapabilirsiniz ve kullandığınız veya genişlettiğiniz çerçeve kodunun, kendiniz yaptığınızdan daha iyi yapılması muhtemel olduğunu bilirsiniz.
Ve bunun bedeli? Çerçeveyi öğrenmek için biraz zaman ayırın. Ancak - hemen hemen her web geliştiricisinin kanıtlayacağı gibi - seçtiğiniz çerçeveyi kullanarak büyük (gerçekten, büyük) faydalar elde etmeyi öğrenmek için harcanan zamana kesinlikle değer.
Wikipedia'daki özet (Yazılım Çerçevesi) (ilk google hit btw) oldukça iyi açıklıyor:
Bilgisayar programlamasında bir yazılım çerçevesi, genel işlevsellik sağlayan ortak kodun seçici olarak geçersiz kılınabileceği veya belirli işlevsellik sağlayan kullanıcı kodu tarafından özelleştirilebildiği bir soyutlamadır. Çerçeveler, iyi tanımlanmış bir Uygulama programlama arabirimine (API) sarılmış yeniden kullanılabilir soyutlama kodları oldukları için yazılım kitaplıklarının özel bir halidir, ancak bunları normal kitaplıklardan ayıran bazı önemli ayırt edici özellikler içerir.
Yazılım çerçeveleri, onları kütüphanelerden veya normal kullanıcı uygulamalarından ayıran şu ayırt edici özelliklere sahiptir:
- kontrolün ters çevrilmesi - Bir çerçevede, kütüphanelerde veya normal kullanıcı uygulamalarından farklı olarak, genel programın kontrol akışı arayan tarafından değil, çerçeve tarafından belirlenir. [1]
- varsayılan davranış - Bir çerçevenin varsayılan davranışı vardır. Bu varsayılan davranış, aslında bir dizi hareketsizlik değil, bazı yararlı davranışlar olmalıdır.
- genişletilebilirlik - Bir çerçeve genellikle seçici geçersiz kılma ile kullanıcı tarafından genişletilebilir veya belirli işlevsellik sağlayan kullanıcı kodu tarafından özelleştirilebilir.
- değiştirilemez çerçeve kodu - Genel olarak çerçeve kodunun değiştirilmesine izin verilmez. Kullanıcılar çerçeveyi genişletebilir, ancak kodunu değiştiremez.
Önceden yazılmış ve test edilmiş birçok işlevsellik içerdiğinden, uygulamaları geliştirirken size harika bir kısayol sunabileceğinden "ihtiyacınız" olabilir. Nedeni, yazılım kütüphanelerini kullanma nedenimize oldukça benzer.
Şimdiden birçok iyi yanıt, ama size başka bir bakış açısı verebilir miyim bakayım.
İşleri biraz basitleştirerek, bir çerçeveyi gerçek işlevsellik dışında tamamlanmış bir uygulama olarak görüntüleyebilirsiniz. PRESTO! bir uygulamanız var.
Bir GUI çerçevesini düşünün. Çerçeve, bir başvuru yapmak için ihtiyacınız olan her şeyi içerir. Gerçekten de kesinlikle hiçbir şey yapmayan çok az sayıda kaynak hattıyla önemsiz bir şekilde minimal bir uygulama yapabilirsiniz - ancak size pencere yönetimi, alt pencere yönetimi, menüler, düğme çubukları vb. Uygulama işlevselliğinizi ekleyerek ve çerçevede doğru yerlere "takarak", pencere yönetimi vb.'den başka bir şey yapmayan bu boş uygulamayı gerçek, tam gelişmiş bir uygulamaya dönüştürürsünüz.
Web uygulamaları, sunucu tarafı uygulamaları vb. İçin benzer çerçeve türleri vardır. Her durumda, asıl sorun etki alanı işlevselliğini sağlarken, çerçeve sıkıcı, tekrarlayan kodun çoğunu (umarım) sağlar. (Bu idealdir. Gerçekte, çerçevenin başarısı elbette çok değişkendir.)
Bunun bir çerçevenin ne olduğuna dair basitleştirilmiş bir görüş olduğunu tekrar vurguluyorum. Çoğu çerçevenin yerleşik korkunç kavramları olmasına rağmen "Kontrolün İnversiyonu" ve benzerleri gibi korkunç terimler kullanmıyorum. Yeni başlayan biri olduğunuz için, size jargonu yedekleyip kolay bir benzetimle gideceğimi düşündüm.
"Çerçeve" nin açık bir tanımı olduğundan emin değilim. Bazen geniş bir kütüphane kümesine çerçeve denir, ancak bence kelimenin tipik kullanımı aioobe'un tanımına daha yakındır.
Bu çok güzel makale sadece bir dizi kütüphane ve bir çerçeve arasındaki farkı özetler:
Bir çerçeve, “Bizi arama, sizi arayacağız” diyen bir kütüphane seti olarak tanımlanabilir.
Bir çerçeve size nasıl yardımcı olur? Çünkü sıfırdan bir şey yazmak yerine, temelde belirli bir çalışan uygulamayı genişletirsiniz. Bu şekilde çok fazla üretkenlik elde edersiniz - bazen ortaya çıkan uygulama, aynı zaman diliminde kendi başınıza yapabileceğinizden çok daha ayrıntılı olabilir - ancak genellikle çok fazla esneklikle işlem yaparsınız.
Basit bir açıklama şudur: Çerçeve, etrafında uygulamalar oluşturabileceğiniz bir iskeledir.
Bir çerçeve genellikle daha karmaşık uygulamalar yapmak için kullanabileceğiniz ve genişletebileceğiniz bazı temel işlevler sağlar, her türlü şey için çerçeveler vardır. Microsofts MVC çerçevesi buna iyi bir örnektir. MVC desenini kullanarak zemin bina web sitesinden kurtulmak için ihtiyacınız olan her şeyi sağlar, web isteklerini, rotalarını ve benzerlerini işler. Yapmanız gereken tek şey "Kontrolörler" uygulamak ve MVC çerçevesi tarafından tanımlanan iki yapı olan "Görünümler" sağlamaktır. MVC çerçevesi daha sonra denetleyicilerinizi çağırmayı ve görüşlerinizi oluşturmayı işler.
Belki en iyi ifade değil ama umarım yardımcı olur
en alt düzeyde, bir çerçeve, üzerinde çalışmanız için bir takım araçların verildiği bir ortamdır
bu araçlar kitaplıklar, yapılandırma dosyaları vb. şeklinde gelir.
bu sözde "ortam", değiştirilebilen, genişletilebilen ve oluşturulabilecek temel ayarları (hata raporları, günlük dosyaları, dil ayarları vb.) sağlar.
İnsanlar aslında çerçevelere ihtiyaç duymazlar, bu sadece zaman kazanmak istemek meselesidir ve diğerleri sadece kişisel tercihler meselesidir.
İnsanlar bunu bir çerçeveyle haklı çıkaracaklar, sıfırdan kodlamak zorunda değilsiniz. Ama bunlar sadece kütüphaneleri çerçevelerle karıştıran insanlar.
Burada önyargılı değilim, aslında şu anda bir çerçeve kullanıyorum.
Bir çerçeve, belirli sorun alanına işlevsellikler / çözüm sağlar. Wiki
tanımı :
Bilgisayar programlamasında bir yazılım çerçevesi, genel işlevsellik sağlayan ortak kodun seçici olarak geçersiz kılınabileceği veya belirli işlevsellik sağlayan kullanıcı kodu tarafından özelleştirilebildiği bir soyutlamadır. Çerçeveler, iyi tanımlanmış bir Uygulama programlama arabirimine (API) sarılmış yeniden kullanılabilir soyutlama kodları oldukları için yazılım kitaplıklarının özel bir halidir, ancak bunları normal kitaplıklardan ayıran bazı önemli ayırt edici özellikler içerir.
Bir çerçeve "zaten yaratılmış" kullanımı konusunda bize yardımcı olur, bir metafor şöyle olabilir,
toprak malzemesinin programlama dili olduğunu düşünün,
ve örneğin "kamera" programdır ve bir not defteri oluşturmaya karar verdiniz. Her seferinde kamerayı yeniden oluşturmanız gerekmez, sadece toprak çerçevesini (örneğin bir teknoloji mağazasına) kullanın ve kamerayı dizüstü bilgisayarınıza entegre edin.
Bir çerçevenin ihtiyaç duyabileceğiniz bazı işlevleri vardır. dahili sıralama mekanizmalarına sahip bir dizi diziye ihtiyacınız olabilir. Ya da belki bir çerçeve içinde bulabileceğiniz bazı kontroller yerleştirmek istediğiniz bir pencereye ihtiyacınız vardır. kendi işinizin etrafında bir ÇERÇEVEYİ kapsayan bir çeşit ÇALIŞMA.
DÜZENLEME: Tamam ben bana ne anlatmaya çalıştıklarını kazmak üzereyim;) belki daha derin düşmeden önce "Etrafında bir ÇERÇEVE ÇALIŞIR ..." satırları arasındaki bilgileri fark etmediniz. Ben nazikçe umuyorum bir zemin vermeye çalışıyorum:
"Kütüphane ve bir çerçeve arasındaki fark" sorusuna iyi bir açıklama burada buldum
http://ifacethoughts.net/2007/06/04/difference-between- a-kütüphane-ve-çerçeve /
Sadece zaten anladıysanız bazen anlaşılabilir olan tanımların ötesinde bir örnek bana yardımcı oldu.
.Net'teki bir listeyi sıralarken bir anlayış anımsadım. belirli işlevsellik sağlayan kullanıcı koduna göre uyarlanmış bir işlevsellik sağlayan bir çerçeveye örnek. Listeyi Al. (IComparer). Sort yönteminde .Net çerçevesinde bulunan sıralama algoritmasının bir dizi karşılaştırma yapması gerekir; A nesnesi B nesnesinden önce mi sonra gelir mi? Ancak Sort'ın karşılaştırmayı nasıl yapacağına dair hiçbir fikri yok; sadece sıralanan tip bunu bilir. Birçok kullanıcı tarafından yeniden kullanılabilen bir karşılaştırma sıralama algoritması yazamaz ve sıralamak için çağrılacak çeşitli türleri tahmin edemezsiniz. Bu işi biraz kullanıcıya bırakmalısınız. Yani, sıralama, yani çerçeve, kullanıcı kodunda bir yönteme geri çağırır, tür karşılaştırmak yapabilmek için sıralanır. (Veya bir delege kullanılabilir;
Bunu doğru anladım mı?