Kütüphane ve çerçeve API mı? [kapalı]


33

Bir kütüphane, çerçeve ve API arasındaki fark nedir? Hepsi bana aynı görünüyor. İnsanların bunu düşündüğünü duymak istiyorum.





2
@Jorg: Bunu bir cevap olarak sunmalıydın. Sınırda olduğu gibi spam spam ve sayfa tıkar.

2
@Sergio - Jörg W Mittag, SO'da 1171 düşünceli ve iyi cevap aldı (burada 42 düşünceli ve iyi cevap alındı). Zor olmaya çalışmıyor. Bu sorunun ne kadar gereksiz olduğunu göstererek P.SE'yi geliştirmeye çalışıyor (burada hiçbir cevabın henüz bir çerçevenin ayırt edici özelliğinden bahsetmediğinden bahsetmiyoruz).
Corbin

Yanıtlar:


35

Bir kütüphane, belirli bir amaca hizmet eden işlevler / nesneler topluluğudur. bir kütüphaneyi çeşitli projelerde kullanabilirsiniz.

Bir çerçeve, bir uygulamanın oluşturulmasına yardımcı olacak bir desen ve kütüphane koleksiyonudur.

Bir API, diğer programların doğrudan erişime sahip olmadan programınızla etkileşime girmesi için bir arayüzdür.

Başka bir deyişle, bir kütüphaneyi bir uygulamanın ek / parçası olarak, uygulamanın iskeleti olarak bir çerçeve ve söz konusu uygulamanın dışa bakan bir parçası olarak bir API olarak düşünün.


7
Bu, çerçevenin çok iyi bir tanımı değil. Gerçekten herhangi bir çerçeveye "desen ve kütüphaneler topluluğu"
demezdim

Bir çerçeve daha inşa edilecek bir çevre gibidir. Bunun dışında +1
Klaim

evet, o konuda kelimeler yüzünden biraz kayboldum. daha iyi önerileri olan var mı? diğer bilge düzenlemek için çekinmeyin. Bir çerçeveyi çağıran wikipedia'yı aramaya başladım: "Çerçeveler, iyi tanımlanmış bir Uygulama programlama arayüzüne (API) sarılı kodların tekrar kullanılabilir olmaları için özel bir yazılım kütüphanesi örneğidir". Yardımdan çok bu sorunun bağlamı.
GS:

3
Bir kütüphane, kodunuz sorumlu olduğunda (kodunuz "kütüphaneyi kullanır") ve bir çerçeve de ücretlidir (çerçeve "kodunuzu çalıştırır"). Örneğin, bir çerçeve bir şeylerin ne olması gerektiğini (Salıncak, servetler) belirtirken, bir kütüphane ile ne zaman ve nasıl kullanılacağına karar verirsiniz (görüntü dönüştürme, şifreleme). Bir API, çağırabileceğiniz bir dizi fonksiyonun tanımıdır ve hem kütüphanelerin hem de çerçevelerin bir parçasıdır.
Martin Wickman

14

Şimdiye kadar iyi cevaplar var ancak bir kilit noktayı kaçırıyorlar - bir çerçeve IoC kullanıyor . Kodunuz bir çerçeve ile çevrilidir. İçinde yaşıyor. Buna karşılık, kodunuz sadece kullanan bir kitaplık veya API. Dışında yaşıyor. IoC farktır.


Mutlaka doğru değil. Bir çerçeve IoC kullanabilir ve uygulamanız bir çerçeve içinde yaşayabilir, ancak buna gerek yoktur. Aptalca, Altyapılardaki Wikipedia girdisi, bunu bir çerçevenin 'ayırt edici özelliği' olarak listeliyor ve bu tezi " dirkriehle.com/computer-science/research/dissertation/… " atıfta bulunuyor , ancak tezin kendisi de ifadelerin inversiyonunu içermiyor 'veya' ioc 've aslında "Tipik olarak, uygulamalar sadece bir çerçeve değil, birkaç kullanmaktadır." (p26, ref p9)
Kirk Broadhurst

11
@Kirk Broadhurst, aslında Martin Fowler'ı düşünüyordu : “Kontrolün Tersine çevrilmesi , bir kütüphaneyi bir kütüphaneden farklı kılan şeyin önemli bir parçasıdır (...) Bir çerçeve, daha fazla davranışa sahip, soyut bir tasarıma sahiptir. Davranışınızı alt sınıflandırma yaparak veya kendi sınıflarınızı takarak çerçevedeki çeşitli yerlere eklemeniz gerekir. Çerçeve kodu daha sonra kodunuzu çağırır ... "IoC'yi ayırt edici bir özellik olmadığı sonucuna varırsak, ayırt edici özellik - hepsi aynı ve bu eğlenceli değil.
Roger

@ ScantRoger, Java Collections Framework IoC kullanıyor mu? Öyle gözükmüyor .......
Pacerier 27:14

3

Bir kütüphane ortak görevleri gerçekleştirmek için oluşturulmuş bir kod koleksiyonudur. Kütüphane kodu nispeten kararlı ve hatasız olma eğilimindedir. Uygun kütüphanelerin kullanılması, yazılması gereken kod miktarını azaltabilir. Bir uygulamanın, işlevselliğin teslim edilme oranını artıracağı için kod satırını azaltma eğiliminde olacaktır. Çoğu durumda, bir kitaplık yordamı kullanmak kendi kodunuzu yazmaktan daha iyidir.

Bir API (Uygulama Programlama Arayüzü), bir uygulamanın mevcut işlevselliğe erişmesine izin veren bazı işlevlere arayüzdür. Bir API, Arayüz olarak adlandırılabilir. API, sistem, kütüphane, çerçeve, program ve uygulama dahil olmak üzere birçok düzeyde mevcuttur. API'ler, bunları uygulayan kod uygulanmadan önce tanımlanmalıdır.

API bölümleri, çeşitli nedenlerle kullanımdan kaldırılmasına rağmen, stabil olmalıdır. API ne kadar yaygın kullanılırsa, onu değiştirmek o kadar zorlaşır. Çoğu Java 1.0 API'sinin tamamı hala mevcut değilse de, birçok yöntem kullanımdan kaldırılmış olmasına rağmen.

Çerçeve, uygulamaların oluşturulmasını kolaylaştırmak için tasarlanmış bir API koleksiyonudur. Altyapılar, yeniden kullanılabilir bileşenler için uygulamalar sunar. İyi çerçeveler uygulamalarında uzmanlaşma eğilimindedir.

Java Collections Framework, koleksiyonları işlemek için kullanılabilecek çeşitli nesne türlerine yönelik bir API koleksiyonudur. Çeşitli koleksiyonlara API hiyerarşisi sağlar. Java Collections Framework'de SortedSet arayüzü, Collection arayüzünü genişleten Set arayüzünü genişletir. Bu API'ler soyut arayüzlerdir ve gerçek uygulamaların farklı isimleri vardır. Koleksiyonlar Çerçevesi, koleksiyonların uygulanmasını basitleştirir ve geliştirme sırasında değişen uygulamaları kolaylaştırır.

Çerçeveler, J2EE'nin geliştirilmesini hedefleyen Java Bahar Çerçevesinde görüldüğü gibi daha küçük çerçeveler inşa edilebilir. Bahar, çoğu kendi başına kullanılabilen veya başka çerçevelerle değiştirilebilen bir düzineden fazla çerçeveden oluşur.

Uygun kütüphanelerin, API'lerin ve çerçevelerin kullanımı gelişimi basitleştirebilir. Bu bileşenler ortak sorunlara dikkat eder ve geliştirme ekibinin uygulamaya özel konulara odaklanmasını sağlar.


2

Bir çerçeve kütüphaneden bir adım ötededir. Araç kutunuz bir kütüphane ise, çalıştayınız bir çerçeve olacaktır.

Wikipedia diyor

Bir API, bir yazılım sisteminin bileşenleri tarafından kullanılan bir dizi fonksiyon ile etkileşim için bir arayüz tanımlayan bir soyutlamadır.

Bir API ile bir kullanıcı arayüzü arasındaki önemli ayrım, bir API'nin diğer yazılım / hizmetlerin çözümünüzle programlı olarak etkileşime girmesine izin vermesidir.

API'ler hem uygulamalar (dll veya eklentiler aracılığıyla) hem de web siteleri ve hizmetler için (REST ve web servisleri aracılığıyla) oluşturulabilir.


Güzel analoji ...
sunwukung

1

API'ler, bir kaynaktan hangi nesnelerin ve yöntemlerin kullanılabileceği konusunda başka bir şeyin nasıl kullanılacağını tanımlar. Örneğin, Twitter veya Facebook'u bir siteye entegre etmek, doğru verilerin güncellenmesini sağlamak için Twitter veya Facebook'tan bir API kullanır.

Altyapılar, zaman zaman neredeyse kendi dilini oluşturabildiği için biraz daha hantal olma eğilimindedir. jQuery, kendi sözdizimine sahip ve koduma girme anlamında biraz daha fazla ağırlık taşıyan bir çerçeve örneği olmak. Altyapılar aynı zamanda bunları bir anlamda API'lere benzer kılan platformlar olabilir, örneğin Win32API veya .Net Framework'ün her biri bir uygulama oluşturmak için çok sayıda yönteme sahiptir, böylece içinde API'ler bulunan Altyapılar ve ayrıca Çerçeveler olarak da görünen API'ler bulunabilir.

Kütüphaneler, bir API veya Framework uygulayan ikili dosyalar olma eğilimindedir ve bu nedenle, bazı durumlarda bir API veya Framework kullanmak zorunda olduğunuz bitlerdir. En azından bu şartları ve aralarındaki farkları böyle görüyorum.


1

Bir kütüphaneye git ve kitap okumaya başla. Eğer uygulama iseniz, o zaman kitap koleksiyonu kütüphanedir. Raflar, dolaplar ve tüm bunları barındıran bileşik, çerçeveyi oluşturur. Kitap okuma görevini gerçekleştirirken temas kurduğunuz her şey API.


Bu harika bir cevap.
Magus

0

Bir kütüphane, ortak görevleri basitleştirmek için kullanılan bir kod koleksiyonudur - sınıflar, işlevler veya dilinize veya platformunuza özgü olan şeyler olabilir. İyi bir örnek, ortak görevler için yardımcı olan (dizeleri oluşturma, bölme, arama veya sıralama vb.) Bir dize işleme kitaplığı olabilir.

Bir API (uygulama programlama arayüzü), başka bir uygulama, sistem veya teknoloji ile nasıl çalışılacağının bir tanımıdır ('arayüz'). Esasen o sistemle etkileşime girebilecek işlemleri tanımlar. Bir API olabilir (API bir kütüphane sarılmış veya sınıfların ayarlandığını anlamına gelir) bir kütüphane olabilir, fakat ayrım bir API daima harici bir sistem başvuran olmasıdır - bir veritabanı, web hizmeti, başka bir uygulamayı veya işletim sistemini olsun kendisi.

Bir Çerçeve daha büyük bir konsepttir - normalde ortak görevleri yerine getirmek için birkaç kütüphane ve API içerir. Daha yüksek bir kavramsal düzeyde var - bu sadece bir araç koleksiyonu değil, aynı zamanda tasarım kalıpları, en iyi uygulamalar ve metodolojiler topluluğu. Yazılım Çerçevesi, genel bir çerçevenin bir uzantısıdır - anlamları, şeylerin inşa edildiği bir temel olmak, destek ve yapı sağlamak ve gereksinimlere rehberlik ve tanım vermekdir.


0

Uygulama, bir çerçeveye dayanan kütüphaneler kullanılarak geliştirilmiştir ve bir API aracılığıyla iletişim kurar.

Bir uygulama oluşturuyorsanız, çevrimiçi bir görüntü işleme uygulaması diyorsanız,

  • Önceden yazılmış bazı görüntü işleme kitaplıklarını kullanabilirsiniz.
  • Herhangi bir çerçevede, uygulamanın oluşturulmasında size rehberlik edecek.
  • Uygulamaya, dış dünyayla etkileşime girmenin bir yolunu sağlayacaksınız ... dünyanın geri kalanına uygulama API'niz bu olurdu.

Uygulamanıza bir çağrı geldiğinde

  • çerçeve rehberliği ile nasıl tasarlandığınız şekilde ele alınacaktır.
  • kütüphane tarafından taşınan aramanın işlenmesi
  • bu işlevlere API'niz aracılığıyla dış dünyadan erişilir

arayan kişiye

Bunların var olmasının sebepleri:

  • kütüphane: tekerleği yeniden icat etmekten kurtarır
  • framework: çerçevenin kendisinde kusur olmadığı sürece sizi beklenmedik sistem tasarımı ve kullanım tuzaklarından kurtarır
  • API: Çekirdeği gerçek dünya erişiminden arayarak uygulama güvenliğini sağlar
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.