Yazılım çerçevesi nedir? [kapalı]


194

Birisi bana bir yazılım çerçevesinin ne olduğunu açıklayabilir mi? Neden bir çerçeveye ihtiyacımız var? Bir çerçeve, programlamayı kolaylaştırmak için ne yapar?

Yanıtlar:


422

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.


27
Cevabı aşağı oylamanın nedenini bilmek istiyorum. Geliştirmeme yardımcı olacak.
Neha Choudhary

4
serin anlamak çok kolay ........... teşekkürler çok
Premkumar

25
@NehaChoudhary, Ben değil, ama -1 çünkü bahsettiğiniz şey bir kütüphane, IoC olmadığı için bir çerçeve değil.
Pacerier

11
Yayınınızı okudum, ancak yayınladığınız şey bir kütüphanenin yapabileceği gibi geliyor. Çerçeve ve kütüphane arasındaki farkı açıklamaya ne dersiniz?
Aaron Liu

2
Anlamıyorum. Açıkladığınızdan daha çok bir kütüphane gibi olurdu değil mi?
yönlendirici

92

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.


17
Neden bu enerjiyi kendi eşyalarınızı kırmak yerine açık kaynaklı bir çerçeveye katkıda bulunmuyorsunuz? 'Yalnız, kayaları hareket ettirebiliriz; birlikte dağları ve tüm bunları hareket ettirebiliriz
Steve Jalim

7
@Jefffrey "O zaman nasıl öğreneceksin? Bir programcı olarak nasıl büyüyeceksin?" İstediğiniz şekilde öğrenin, ancak gerçek bir müşteri için çalışmayı düşünüyorsanız, mümkün olan en kısa sürede en iyi çözümü sunmalısınız. "Muhtemelen buggy" kodunuz bunun için kabul edilemez.
Cmorales

6
@Cmorales, bir programlama dili veya herhangi bir alana özgü sorun öğrenmek istiyorsanız, kesinlikle "gerçek" bir müşteriniz olmayacaktır (ve muhtemelen elinizde çok fazla zamanınız olacaktır) ve bu yüzden yeni başlayanları öneriyorum çerçevelerden başlamamak.
Ayakkabı

3
@Jefffrey Yorumunuzda yeni başlayanlar hakkında hiçbir şey söylemediniz, geneldi. Önce kendi başınıza öğrenmeniz gerektiğine katılıyorum, ancak yorumunuz bunu ve gerçek (iş) yaşamında sadece öğrenmek için buggy kodunu kullanamayacağınızı belirtmedi. Çerçeve kullanmayan bazı adamları tanıyorum çünkü daha iyi bildiklerini düşünüyorlar ... ve her proje için iki kez zaman harcıyorlar.
Cmorales

1
@Cmorales Ayrıca çerçeve kullanan ancak her proje için iki kez zaman alan bazı insanlar tanıyorum. Programlama hızı her zaman kullanılan araçlarla ilgili değildir.
Cypher

53

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:

  1. 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]
  2. 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.
  3. 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.
  4. 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.


13
sorunun türüne göre cevabınızın beyaz kısmı gri kısımdan çok daha iyiydi ...
OlimilOops

Soruyu soran kişinin Wikipedia girişini de bulduğundan eminim ... Muhtemelen daha kapsamlı bir cevap aradı.
Stophface

31

Ş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.


14

"Ç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.


8

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


1
Aslında daha uygulamaları oluşturmak gibi içine daha iskele çevresinde ona.
Jörg W Mittag

4

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.


4

Genel olarak, bir Çerçeve Çalışması, yapıyı yararlı bir şeye genişleten bir şey için bir destek veya Kılavuz olarak hizmet etmeyi amaçlayan gerçek veya Kavramsal yapıdır ...


2

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.


İlk cümlede "soyutlama" kelimesi vardır. Bununla ne demek istiyorsun ? soyutlamayı nerede kullanıyoruz?
Kumaresan Perumal

2

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.


2

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 /


aşağı oyları tamamen anlamıyorum ... Bu konuda tamamen şaşırdım. soru acemi temel soru tür ve benim cevabım oldukça iyi göre ...
OlimilOops

4
Açık olmak gerekirse: Oy vermedim. Bununla birlikte, bahsettiğiniz şey, bir çerçevenin endişe duyduğundan çok daha düşük bir seviyededir. Koleksiyonlar ve Sıralama Algoritmaları, örneğin Frameworks'ten daha standart kütüphanelerdir.
bakkal

1
cevap için teşekkürler ama ... sorumun cevabı değil. OP'nin sorularına göre, "standart kütüphane" ve "çerçeve" arasında ayrım yapmak yanlış yer. örneğin .net-framework içinde isim-alanı koleksiyonları, isim-alanı koleksiyonunun .netframework bir parçası olmadığını söyleyen hiç duymadım çerçevenin bir bölümünde bulabilirsiniz. sorumun cevabı yanlış
OlimilOops

1
Bu bir kütüphanenin tanımıdır . Bir kütüphanenin aksine bir çerçevenin ayırt edici özelliğini özlüyor: Kontrolün İnversiyonu .
Jörg W Mittag

2

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ı?

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.