9 EKİM 2007, Salı

Nasıl İyi Bir Apı Tasarım Ve Neden Önemlidir

>> İlk olarak, görüşmelerin bizim serisinin son için hepinize teşekkür ederim ve hoş geldiniz demek istiyorum peşin konular ve programlama dilleri üzerine. Görüşmelerin bu serinin amacı; Google'da var programlama dillerinde büyük bir etki bilginin tüm maruz kalmaktadır. Böylece - Ne yani, bu seyirci o herkesin size dahilerin tüm kim bir konuşma vermeli, Google için çalışmak ve kendimi indirimli. Yani, bana ismimi lütfen gel Jeremy Manson bana e-posta, IM beni ne ve vermek için gidiyoruz konuşmak ne olduğunu söyle ve Onu kurmak ve size bir konuşma yapacaktır. Siz Josh ya da baz

ı benzer bir yazar olmak zorunda değilsiniz insan bu yüzden yapmak için geliyor var. Josh - ve biz geç kalıyoruz. Alay etmek beni çok fazla onu kurmak ve ona bir kabarma baş vermek istemedi. Yani, ben tanıtma

k istiyorum Onu. Ben sadece bu muhtemelen parlar dahilerin dolu bir şirkette, onun yıldız olduğunu söylerim En parlak. Bunun için seni alırsınız: Ve ben sadece ... >> BLOCH istiyorum. >>

“Google Tech Sohbetleri 24 Ocak 2007 ÖZET Dünyada her gün, yazılım geliştiriciler Uygulama Programlama Arayüzü çeşitli (API) ile çalışan zamanlarının çoğunu harc...”
GoogleTechTalks

Ben sadece kimin çizme topuk I, Joshua yalamak layık değilim bu adamı tanıtmak istiyorum Bloch bayanlar ve baylar. >> BLOCH: Normalde bu noktada, ben teşekkür ederim giriş ama bugün benim introduser Ben o formalite vazgeçmek düşünüyorum. Yani, gereken - ben de bu ne yazık ki oldukça uzun bir konuşma olduğunu yoluyla diyebilirim. Bir ya da iki anahtar fikirleri ile kısa görüşmeler çalışın ama bu konu sadece değil Bu kendisini ödünç. Yani, son

Nasıl İyi Bir Apı Tasarım Ve Neden Önemlidir Resim 1 Nasıl İyi Bir Apı Tasarım Ve Neden Önemlidir Resim 2 Nasıl İyi Bir Apı Tasarım Ve Neden Önemlidir Resim 3 Nasıl İyi Bir Apı Tasarım Ve Neden Önemlidir Resim 4

una kadar ve aslında sorularınızı tutun lütfen, biz olacak Muhtemelen sorulara olmadan saat kadar kullanabilirsiniz ama sonra seninle sürece askıda olacak istediğiniz ve gereken tüm sorulara cevap. Peki, neden API tasarımı önemlidir? Peki, API'ler bir şirketin en büyük varlıkları arasında olabilir. İyi bir API insanlar yatırım şeydir ağır olarak. Onlar apaçık bir şekilde ve daha az belirgin şekillerde bunu. Belirgin yolları olabilir vardır API'ler etrafında inşa edilmiş bir tarafından bir ürün olarak. Onla

r API için yazıyorum. Ama daha az belirgin yolları bunu öğrenmek olduğunu. Onlar saatlerce harcamak - aslında onlar API'leri öğrenme ay harcamak. Ve bir kez onlar biliyor, onlar var çünkü bir yenisini öğrenmek istemiyorum, yapmış olduğunuz bildikleri her şeyi unutmak ve başka bir şey ile değiştirmek. Ve dahası, API sadece bir şirkette altyapısı boyunca kablolu. Yani, başarılı bir API yapabilirsiniz Bir şirket, son bir franchise verebilir. Yani - Ben şimdi yirmi beş yıl yaklaşık tahmin ve benzer kötü bir API bir şirketin en büyük yükümlülükleri arasında olabilir. Ve bir çift vardır Bunun nedenlerinden. Her şeyden önce, kötü bir API biliyorsunuz, bitmeyen bir akış neden olabilir, insanlar bunu yapmak için gereken şey ne yapamazsınız, çünkü destek telefon aramaları ve Eğer kötü bir API var bir kere çünkü ileriye taşımak için bir şirketin yeteneğini inhibe at will değiştiremezsiniz. Hemen hemen sonsuza onunla sıkışıp kaldık. Sen bir şans var doğru olsun. Yani, bu oldukça korkutucu ve akılda, sen nasıl öğrenmek istiyorum zaman test standı olacak API'ler yapmak. API tasarım neden önemli olduğunu Yani, şimdi biliyorsun ama neden sizin için önemli mi? Değil hepiniz API tasarımcıları olarak kendinizi düşünebilirsiniz. Peki, hepiniz API tasarımcıları çıkıyor. Herkes programları bilgisayar API tasarımcısı. Ve neden iyi bir programlama doğal modüler olması ve Bu arası modüler sınırları kendileri API'ler vardır. Ayrıca, iyi API'ler yeniden almak eğilimindedir. Bir modül yazdım ve o, şimdi, bu gün bir şey yapıyor iyi ise senin meslektaş biri aynı şeyi yapmak ihtiyacımız olacak. Ve Tanrım, sen var biliyorum Zaten öyle bu modülü var ama o API kullanarak bir zamanlar, artık ücretsiz Eğer bunu değiştirmek eğer onun programı kırmak gerekir, çünkü isteğiyle bunu değiştirmek için. Ve o varsa on arkadaş ve hepsi kullanmaya başlayabilirsiniz o zaman gerçekten ıslatılacağız ediyoruz. Son olarak, düşünce API tasarım şartları yazdığınız programların kalitesini artırmak eğilimindedir. Bu eğilimi tür, sadece birlikte bir şeyler hack sizi korumak. Bu yazmak istiyorum yapmak eğilimindedir güzel birimler, şimdi, ki - composable ki, yeniden kullanılabilir olduğunu ve mantıklı olduğunu. Şimdi, bir başka soru başında yolumdan almak zorundasın, neden konuşuyorum olduğunu API hakkında ne bir dil tasarım serisi olarak hesap edilir? Ve tabii ki glib cevap Jeremy bunu bana sordu olmasıdır. Ve Jeremy tabii, arkadaş olmak için kullanılan, bu yüzden dedim, "Evet, tabii ben bunu yapacağım." Ama aslında gerçek cevabı bu API tasarımı ve dil Tasarım çok benzer. Tek gerçek fark API tasarımı kısıtlı olmasıdır sözdizimsel tarafından - üzgünüm, dilin sözdizimi kendisi için API yazıyoruz. Oysa bir dil tasarlarken yaparken, bir şey yapmak için esnekliğe sahip sen sözdizimi olduğu gibi. Ama aslında, bir dil ya da bir API tasarlarken ister, sen makineye ve diğer programcılara niyetlerini ifade etmek programcılar için bir araç oluştururken, Programı okuyan, vb, onu korumak değiştirmek ve. Son olarak, bu gün değil mi Gerçekten bir dilde ya da tek başına bir kütüphane açısından düşünüyorum. Bir dil ve kütüphane birlikte içermektedir bir platformdur ve bir dil tasarlarken yaparken, elinizde çekirdek kütüphaneleri el tasarımı dil. Yani, gerçekten beceri iyi API'leri tasarımı ve tasarım için belirlenen dil hemen hemen aynıdır. Yani, iyi bir API özellikleri nelerdir? Ilk olarak Tüm bu öğrenmesi kolay ve hatta belgeler olmadan, kullanımı kolay. Yani, iyi bir API ezberlemek kolay olmalıdır. Sadece düz mantıklı olmalıdır. Ve kapak tarafı yani, sadece iyi bir API kullanmak kolay olmalı ama zor bir kötüye gerekir Iyi bir API. Sert ya da kullanmak mümkün olmalıdır - İyi bir API kötüye. Bu temelde, İyi bir API sadece doğru olanı yapmak için zorlamak gerekir. O okunması kolay olmalı ve Bu API için yazılmış kod korumak için. API yapmak için yeterince güçlü olmalıdır ne yapmak zorunda. Ben API güçlü olması gerektiğini söylemedim unutmayın. Bu değildir daha güçlü bir API durumda, o kadar iyi olduğunu. Bu temelde sadece olmalı bunu yapmak için gerekeni yapmak için yeterince güçlü. Ama API üzerinden gelişmeye kolay olmalı bir süre sonra yeni ihtiyaçlar olacak çünkü. Peki, ne yapmak istediğinizi yazmak istediğim kendi gereksinimlerini karşılar ve gelecekteki ihtiyaçlarını karşılamak için gelişmeye olabilir bir API. Ve Son olarak, API kitleye uygun olmak zorundadır. Diyelim iyi bir API nedir Bir Wall Street analisti muhtemelen çünkü bir fizikçi için iyi bir API olmadığını söylüyorlar Farklı terminoloji. Onlar farklı düşünüyorum. Bu yüzden onların API kendi kitleye yönelik olması vardır. Yani şimdi biz özellikleri ne olduğunu biliyorum. Onları nasıl elde edebilirim? Ve bu ne Bu konuşmanın geri kalanı hakkında. Konuşma beş bölüme ayrılmıştır. İlki API tasarım sürecinde yer almaktadır. Ben büyük bir süreç weenie değilim ama üzerinde bulundu tüm iyi API tasarımları açısından ortak olan bazı şeyler vardır yıl olduğu süreç bunları oluşturmak için kullanılır. Yani, o üzerinden almak çalışacağım. Ardından, genel ilkeler Onlar yöntemlere başvurmak olarak API tasarımı, daha sonra bu ilkeler onlar sınıflar için geçerli olduğu gibi, ve onlar istisnalar uygulamak gibi. Ben zamanınız varsa Ve nihayet, ben refactorings bir çift göstereceğiz nerede API tasarımları geliştirmek. Yani, gibi API tasarım süreci nedir? Peki, Yapman gereken ilk şey gereksinimleri toplamak lazım ama sağlıklı bir ile bunu bir leke dozu - şüphecilik. Genellikle insanlara sorduğunuzda, çünkü, "Peki, bildiklerimi Bu API, sizin için ne var? "Sen gereksinimleri gerçek set olmayacak alırsınız Ne, bu olacak Önerilen çözümlerin bir dizi olacak ve daha iyi bir çözüm bulunabilir. Yani, bilirsin, eğer birisi Eğer en Biz tam çöp toplama aralıkları kontrol etmek gerek, "diyelim söyler ve Her çöp toplama alabilir en uzun süre. "Biliyor musun, bu gerçekten bir gereklilik değil. Ben gereksinimi biz ise sorunsuz bir sunucu çalıştırmak gerekiyor, biliyorsunuz, demek Herhangi bir çöp toplama gerçekleşir. Nasıl bu size kalmış ulaşmak için seçin. Senin iş senin API paydaşların gereksinimlerini ayıklamak ve çoğu zaman gerçek vermek ve süreci alır. Eğer şartları var, onlar şeklinde almalı Kullanılan vakalar ve kullanılan durumlarda, ben sadece demek sorunlar API mümkün olmalıdır çözmek için. Onlar kriter karşı sağladıkları Ve bunlar son derece önemlidir hangi önerilen herhangi bir çözüm ölçebilirsiniz. Aklınızda tutmanız gereken bir şey olduğunu Eğer been olandan daha genel bir çözüm oluşturmak için daha kolay ve daha ödüllendirici olabilir yapmak istedi. Bu, sadece, demek gerektiği anlamına gelmez "Ah, ben bir çerçeve oluşturmak için gidiyorum," Her zaman birileri bir şeyler yapmak ister. Ama bazen daha özel bir şey daha daha az güçlü olmanın yanı sıra inşa etmek zor. Yani, her zaman açık tutmak ne birtanemsin - ne zaman Eğer bu ilk gereksinimleri bakıyoruz. Ah, ben başka bir örnek var sanırım, bakalım ne demek burada dediklerini ve neyi. Dedikleri zaman, "Biz yeni veri yapılarını gerek ve bir şirkette aslında başıma bu Version 2 nitelikleri, "ile RPC denilen Biz tür yükseltme iken Transarc, sen bilirsin. Onlar bilirsin, "yepyeni bir set yapın, dedi veri yapıları ve API'leri yepyeni bir dizi. Biz ihtiyacımız "onlar gerçekten geliyordu Ne oldu" iç veri yapıları diğer tüm evrim barındıracak yeni bir veri formatı. " Eğer veri yapılarının yepyeni bir set yapmak istiyorum gerekmez, çünkü biliyorsun ve eklemeye karar her zaman tel üzerinde ve Disk arabirimlerdeki yepyeni bir set Sunucunuza birkaç bağlıyor. Yani aslında, ben çok daha dinamik ve biz sisteme yapılan tekrar yapmak zorunda kaldı. Yani, gerçekten kısa bir spec ile başlamalıdır, tek sayfası İdeal. Bir API tasarımında Bu aşamada, çeviklik kesinlikle bütünlüğünü koz. En kötü Yapabileceğiniz şey bir odaya altı akıllı adamlar uğurlanacak ve onları orada oturup sahip olmaktır Kapı altı ay kapalı ve 240 şartname belgesi ile çıkıyor. Ve inan Bana bu birçok, birçok kez yapılmıştır. İlk, çünkü bu noktada korkunç bir fikir hepsi kendi egosu onlar sadece ne yaptık yatırılır. Hatta onu inşa edeceğiz o bok bir parçası olup olmadığını. Herhangi bir iyi olmadığını ve her şeyden ikinci, bilirsin, nasıl biliyorsun? Bu büyük, uzun, tüylü spec gibi. Artık çevik. Onlar temel yaptıysanız hata, o zaman bunun 240 sayfaları değiştirmek zorundasın. Ama bazı karşılamak için başarısız olabilir Onlar başlamadan önce onlar gerçekten anlamadı anahtar ihtiyacının tür. Peki, ne Başlangıçta yapmak istiyorum tek bir sayfada tüm API spec olması. Bu şekilde yapabilirsiniz Mümkün olduğunca çok paydaşların bu spec kapalı çıkma. Onlar ne söyleyeceklerini dinleyin ve ciddiye. Onlar Hayır, özür dilerim, "derseniz, bu benim için yapmayacağım çünkü ben yapamam böyle ve böyle bir program yazmak Peki, olmamalıdır "düşün. Biliyorsun, sen demek olabilir" Programın bu tür yazılı. O. Gerçekten kötü bir fikir "Ama daha büyük olasılıkla, sen diyebilirsiniz" Ah gee, bunu düşünmedim. Bu gerçekten çok önemli. Ne bu şekilde yapısı olur? " Her şey sadece bir sayfa uzunluğunda. On dakika içinde önemli refactorings yapabilirsiniz. Eğer sen Kısa spec tutun, bu değiştirmek kolaydır. Ve sen kazanç yalnızca bu spec ete Eğer doğru yolda konum güven. Ve bu mutlaka kodlama gerektirir. Özellikle, Eğer tanımladığınız API kodlama gerektirir. Bu uygulama içermez API. O zaten uygulanan oldu davranarak içerir. Yani, bu neye benziyor Eğer doğru ne zaman? Peki, burada zaman hakkında yazılı olan bir örnek olduğunu Ben ay bir sayı önce OOPSLA birlikte bu konuşmayı koyarak oldu. Birisi istedi yetenek başarısızlık karşısında bir hesaplama yeniden denemek için. Ve ben Oh iyi, "dedi biliyoruz, biz, gerçekten. Aksi uygulamakla çerçeve olarak bilinen bu uygulamakla çerçevesi "Ve Burada istediğiniz tüm şeyi yeniden denemek için tercih nasıl söyler bir yeniden deneme politikası başarısızlık karşısında. Yani, bilirsin, burada küçük bir arayüz ve bir çift arasında var yöntemleri. Belirli bir başarısızlık kurtarılabilir olup olmadığını biri size söyler. Siz istisna geçmek ve sadece doğru veya yanlış verir. Biz bu birinden kurtarmak için çalışmalısınız ya da olmamalı. Ve ikincisi açısından bir sonraki gecikme, ilk başlangıç ​​saati ve hesaplar gerçek deneme politikasının önceki deneme ve bütün bu verilerin ileterek sayısı vatansız olabilir. Yani, singletons olabilir. Sen üstel olarak adlandırılan bir yeniden deneme politikası olabilir geri bas. Ama her üstel geri-off örneği herhangi bir veri depolamak zorunda gidiyoruz. Bu gerçekten sadece bir deneme politikası ve üstel geri çekilme denir. Ve bu tür Tüm bu birine yoktur. Ve bu gerçekten çok tam değil. Bu, biliyorsunuz, değil Java doc için kullanabilirsiniz bir kalitede bir spec. Birisi kullanabileceği bir spec değil için uygulanması ama yeterince birisi bakmak ve söylemek için iyi bir spec var etmek, "Ben gerek yoksa öyle değil evet. O ne yapıyor." Gerisi burada başka slaytta olduğunu. Bu aslında yeniden deneme politikalarını kullanmanızı sağlar statik yarar bir dizi. Peki, ne olabilir Yapmalısın? Peki, size bir ilk şey, bir yürütücü hizmet geçmek ve yeniden deneyin Politika ve yeniden deneniyor uygulamakla hizmet olsun. O, hangi aynı arabirimini uygular executor hizmet. Zaten bir yürütücü hizmetini nasıl kullanacağınızı biliyorsanız Yani, sen nasıl yeniden deneniyor executor servisini kullanmak ve bu arada harika etmek. Yani tutmak için iyi bir yoldur küçük bir API kavramsal ağırlığının tür. Zaten olmuştur Kullanım arayüzleri tasarlanmış - tanımlanmış, bu durumda, uygulamakla hizmeti. Ve başka ne var? Sahibiz Bir yeniden deneniyor uygulamakla hizmeti başka türlü. Ne - arasındaki fark nedir İlk iki? Ben bu yüzden, ben bunun için özür dileriz, bir süre için bu bakmadım. Neyse, Değil mi - bu önemli değil. Ve sonra, biz alır biri sarma bir çift var Bir çağrılabilir ve yeniden deneniyor döner, çağrılabilir bir yeniden deneniyor döner ve bir çalıştırılabilir alır çalıştırılabilir. Ve sonra, biz yeniden deneme politikalarının kendilerini bir çift örnekler var. Bunlar Eğer bir üstel backoff istiyorsanız statik fabrikalar, biz, bir tane olsun. Ve bunlar senin üstel backoff tanımlayan parametrelerdir. Başlangıç ​​gecikme nedir? Neyin içinde Ünite, sen 10 saniye, yüz milisaniye, ben ne olursa olsun ve sonra, zaman aşımı, biliyorum Bunun ne anlama geldiğini emin değilim. Yani, bu arada, bu aslında ilginç. Bu bana söyler Bu yeterince iyi değildi, biliyorsun. Ne Sana göstermek istediğim bir şey var o ise gerçekten basit. Bu, slayt veya iki uyar niyetinizi iletişim kurmak için yeterli ve yeterli sıralama, yeterince iyi olmadığını anlamaya ve bilirsin, denemek için. Ve bence Burada cevap yeterince yeterli değil oldukça iyi, neredeyse iyi olduğunu. Ben, zaman aşımı sanırım Muhtemelen, genel zaman aşımı olduğunu. Gibi ne kadar çalışıyor ve yeniden deneniyor sonrası nihayet do you vazgeçmek. Ama bir yerde bu konuda söylediler gerektiğini düşünüyorum. Ama yine de, olsun fikir. Bu fikir, bir API çok küçük bir açıklama olmasıdır. Ama bu kadar büyük o yapılması gerekenleri yapmak için yeterince iyi olup olmadığını öğrenmek için. O değil Ve eğer, bu kolay Bunu değiştirmek için. Erken ve sık sık API yazmalıdır. Tabii ki, başlamalı Eğer API uyguladık önce bir atmak zorunda sizi kurtarır, çünkü Kötü bir API uygulaması. Önce bunu belirtirseniz, o zaman bunu uygulamak, sonra - eğer sen biliyorsun uygulanmasını denemek ve API çöp, iyi, çok harcadığım olduğunu karar zaman uygulamadan. Dediğim gibi bile belirttiğiniz önce, sen başlamalı düzgün bunun için uzağa ayrıntılı özellikleri atmak zorunda sizi kurtarır, çünkü Kırık API'ler. Eğer eti dışarı gibi API yazmaya devam etmeli ve bu önemli. Bazı insanlar, bir nevi sürecinde ve hemen yarısına kadar API yazma durdurmak uygulanmasına yürüyüşüne bu ölüm gidin. Bu sorun size kötü sürprizler olsun yaklaşık bir hafta sizi tekrar yazma çalıştığınızda gemi ve bunu bulmak önce, seni "Aman Tanrım. Aslında biz çözüldü düşündüm bu önemli davayı çözmüyor." biliyorum Ve bazı insanlar endişelenmeyin. Onlar API tüm bu kodlama olduğunu biliyorum, endişe zaman kaybı olduğunda bunu uygulamak olmalıdır. Ama bu hiçbir şey bu kadar uzak olabilir doğrusu. Eğer herhangi bir API yazma kod olanlar ilk parçaları en önemli arasındadır Hiç ona yazacağım kod parçaları. Kod örnekleri üzerinde yaşıyor sen Bu API nasıl kullanılacağı için yayımlamak. Ve bu örnekler ağır benzetilmiş almak eğilimindedir. Eğer Onları doğru, sizin API iyi kullanımları ile piyasaya numaralı seribaşı olsun. Onları alırsanız Yanlış, tersine, bilirsin, yüzen kırık programları olacağını sağladık önümüzdeki on yıl için web etrafında. Ve ben, tüm bu iman tanırdım benim kalbim ve ruhum. Ama şimdi, ben aslında bunun bir kanıtı işaret edebilir. Içinde çıkıyor Son OOPSLA, Fairbanks, Garlan ve tarafından çağrılan Tasarım Fragments yayınlanan bir kağıt vardı CMU'daki Scherlis. Ve aslında onlar orijinal uygulamaları hatalar takip bilirsin, birlikte sevk, kırık eşzamanlı programlarına Java ilk sürüm, binlerce Bunların bugün hala web üzerinde var olduğunu. Yani, bilirsin, yol ben bu örnek koymak Program örnek olması gerekir. Onlar örnek programlar onları aramak bir nedeni var. Ve programlar Bu - her zaman bunu ortaya koymasıyla gibi sen, bir API yazma ilk programları, Örnek programlar olur. Sen başparmak benim kuralı harcamak gerektiğini, biliyorsunuz, biliyorum, bu yüzden Eğer üretim kodu gibi örnek kod, her satırında çok zaman olarak on kat. Bu gelebilir geriye size ama gerçekten inanıyorum. Bir SPI yazma, bir Servis Sağlayıcı Arayüz daha da önemli API başka türlü yazı daha. Hepiniz muhtemelen Ne Spis veya belki de yok. Bir SPI olduğunu biliyorsanız, elinizi kaldırın. Tamam. Yani, bir SPI Bir şey yapmanın yeni bir araç sağlamak için kullandığınız bir API özel bir türüdür. Bu programcılar için oldukça yazmak API değil, plug-in, haydi API var RSADSI Incorporated kendi şifreleme yöntemleri sağlar ve Sun Microsystems sağlamak - diyelim ki, izin verir Onların şifreleme yöntemleri. Yani, bu şifreleme API kullanıcı daha yüksek bir seviyeye kullanabilirsiniz Daha sonra bu şifreleme yöntemleri gönderir API. Ve Spis hakkında bir şey olduğunu Eğer altlarında çok farklı uygulamaları gizlemek edebilmek gerekiyordu. Sen biliyorsun, bir SPI yazmak ve yalnızca bir sağlayıcı varsa ve o dışarı çıkıyor pratik mesele, muhtemelen başka desteklemek mümkün olmayacak. Eğer denemek kez ikinci yapmak, size sonsuza kadar bağlar o SPI ilgili bir şey var olduğunu göreceksiniz Sadece uygulama aslında düşündüm. Öte yandan, iki uygulamaları yapmak yerine birden. Sonra, muhtemelen yeterince iyi olacak. Muhtemelen desteklemek mümkün olacak Bazı zorlukla sonraki olanları. Eğer üç yaparsanız Ama, muhtemelen iyi çalışır herhangi bir sayı için. Bu üç çalışıyorsa, dördüncü bütün her birinden farklı olmayacak İlk üç. Kendimi bu öğrendim ve o zaman, bir kitapta gördüm, Will Tracz keşfetti Bu ve bunu bir İtirafları altyazısı olan bir kitapta Threes Kuralı denir İkinci Program Satıcı, bir yazılım yeniden hakkında bir kitap çünkü. Ve bu arada, burada Bu konuşma boyunca kullanılır ince kodlama açıklar. Ne zaman bir şey görmek Yeşil, bu iyi demektir, bu şekilde yapmak. Eğer kırmızı bir şey görünce, bu demektir Bu kötü, bu şekilde yapmıyoruz. Sen genelinde gerçekçi beklentiler korumak gerekir API tasarım süreci. En API tasarımları kısıtlı bitti çıkıyor. İnsanlar onları belki yapabileceği daha fazlasını yapmak istiyorum. Yani, taviz vermek zorunda olacak. Herkesi memnun edemezsiniz. Herkesi memnun etmek çalışırsanız, bir domuz ile gelip. Sen hiç kimse düzgün kullanmak mümkün olacak büyük, pis API'leri ile birlikte gelir. Peki, ne yapmak gerekir? Ve bu garip gelebilir, sen herkese eşit gücendirmek amaçlamalıdır olduğunu. Fikir önemli paydaşlardan birisi çok azalıyor ise, biliyorsun ki API olmadığından ve diğerleri muhtemelen bir sorun, gerçekten mutluyuz bunu yapmak zorunda bir şey yapıyor. Herkes gibi% 100 daha az mutlu ama onlar iseniz tüm mutlu sonra yeterli, muhtemelen doğru olanı yaptık. Ancak bu yanlış anlaşılabilir yok şeklindeki Ben komite tarafından tasarım lehine ve herkesin fikirlerini ve lapa almalı tamamen onları. Bunu API sağlayabilirsiniz güçlü tasarım kurşun bir tür ihtiyacınız olduğunu tasarım, uyumlu ve güzel ve net bir şekilde çalışması, biliyorsun biridir konum tek zihin ya da en azından bir tek fikirli gövde. Ve bu ticaret biraz olmanın, her zaman kapalı , bilirsin şey birçok müşterilerine ihtiyaçlarını karşılamak ve henüz üretebiliriz, güzel ve tutarlı. Hatalar yapmaya bekliyoruz. API tasarımı zordur. Şimdi neyse ki, bir kaç yıl gerçek dünya kullanımının her zaman hatalar dışarı floş olacaktır. Ne yazık ki, o zaman bu kadar gibi çok geç onlar hakkında bir şey yapmak. Olsa da, güzel görüşmeler yazmak ve insanları anlatın hatalar tekrar bunları yapmak kalmamak için ve bugün burada ne yapıyorum tür. Yani, hata yapmaya gidiyoruz verilen ve orijinal ile sıkışmış gidiyoruz En azından bir çeşit ona ekleyebilir ve bir şey üretmek, böylece API API yazmanız Eğer özgün tasarımlar eksikliklerini almak çevrede yardımcı olacaktır. Son örnek Hayatımda ben 1997 civarında yaptığı koleksiyonları API değildir, vardır 1998. vardı sıralanmış setleri ve harita uygulamaları tür bazı gerçek kusurları. Özellikle, seni biliyorum, onlar biraz asimetrik konum. Bu geriye daha ileri çok daha kolay ve Birkaç başka şeyler vardır. Ben o zaman bu kusurları hakkında biliyordu ama ben bilmiyordum nasıl bunları düzeltmek için. Ancak, biz bu API uzatmak başardık. Yani, en bakarsanız Java 6. son sürümü Sen, ulaşım yapılabilir Set ve gezilebilir Haritası denen bir şey görürsünüz hangi sıralı seti ve sıralı haritayı uzatır ve ek yöntemlerini bilmek, sağlamak temelde bu zorlukları düzeltmek. Bilirsin ve çünkü orada mükemmel bir çözüm değil Eski uygulamak bazı şeyler - eski arayüzleri ve henüz sabit değil. Fakat Güneş'ten en azından tüm standart toplama uygulamaları artık sabittir. Peki, genel nelerdir İyi API tasarım ilkeleri? Her şeyden önce, bir API bir şey yapmalıyım ve iyi yaparım. Ve ben o neredeyse tüm sonraki beş dakika boyunca söylemek için gidiyorum ne demeliyim olabilir sadece annelik ve elmalı turta gibi konuşuyorsun. Ama, bundan daha fazlası var. Ben gidiyorum Size eyleme tavsiye vermek için denemek için. Ben standardın tür almaya denemek için gidiyorum API gibi eski ruhlar bir şey yapmalıyım ve iyi yapmak ve gerçekten ne anlama geldiğini görmek için ve nasıl bunu başarmak için size. Yani, bilirsin, bu durumda, işlevsellik olmalı açıklamak kolay. Açıklamak kolay değil, o zaman bir şey yapıyor ve bunu yaparken değil iyi. Bu bir karmaşa. Bunun için iyi bir isim ile gelip yapamıyorsanız, o zaman bir karmaşa. isimler size geri konuşurken API, bu yüzden onları dinlemek. O isim çalıştığınızda yöntemler ve bu sınıflar, gerçekten karmaşık isim gibi ile gelip eğer, biliyorum DynAnyFactoryOperations ya da aslında adlandırma ihlal, bilirsin, BindingIteratorImplBase anahtarı çizgi merdane sözleşmeler - platformu, üzgünüm. ENCODING_CDR_ENCAPS, bilirsin, açıkça sorunları var. Herhangi Bu tür şeyler içeren API bir felaket. Oh, ne bu konuda, OMGVMCID? biliyorum Ben geri kalanını anlamaya olamaz - OMG "Aman Tanrım," ama ben yapamam, olduğunu. Ve bu arada azından ben sadece bu uyduruyor düşünüyorum, bütün bunlar gerçek bir Java geliyor Platform API. Ve ben o kulüp İyi API adlarını olduğunu söylemek dışında ne söylemem Bir yazı gibidir. Evet, ben bir yazı ne olduğunu biliyorum. Tabii, bilirsin, neye, italik var oluyor ya da kalın ya da her neyse. Ben bir dizi ne olduğunu biliyorum, bir dizi biliyorum. Özel anahtar bir kilit, ThreadFactory, Bu şeyler onlar anında ne olduklarını iletişim, bilirsin, vardır. Ve yöntemleri, hepsini böyle olmalıdır sınıfları biliyorum. Onlara bakarak, bilirsin, olması gerektiği Ne olduklarını açık olması. Ve iyi isimler iyi tasarımlar sürücü. Eğer bir şey var bir kere sen biliyorsun Bu bir dizi denir. Sen operasyonları ne olduğunu biliyoruz. Sen kümelerinden şeyler eklemek, kaldırmak Eğer maddeleri ihtiva test. Yani, iyi isimler iyi tasarımlar sürücü ve kötü isimler bir göstergesidir kötü tasarımlar. Yani, sizin için konuşan bu isimler dinleyin. Ve eğer sadece bunu yapamazsınız o zaman muhtemelen makul bir şey oluşturmaya çalışıyorum değil, hakkını çalışmak için olsun. Eğer çok fazla kramp çalışıyorsanız Yani, her zaman bir modül kadar bölme mükellef kalır Bir modüle veya sıralama ortaya çıkarmak için çalışıyorsanız, birlikte birden fazla modül koyarak İç detaylar bu gizli gerektiğini. Belki sadece daha büyük bir modül yapmak gerekir o bazı ayrıntıları gizler. Bir API mümkün olduğu kadar küçük fakat daha küçük olmalıdır. Bu prensip genellikle Einstein atfedilir. Ben baktım rağmen gerçekten zor ve Ben o güne kadar o söyledi inanmıyorum. Ben o olduğunu biliyorsun inanıyorum - muhtemelen inanıyordu o ama o söylemedi. Her halükarda API kendi gereksinimleri ve eğer tatmin etmelidir Sadece konuşmak gelen bir şey, bugün hatırlıyorum, bu unutmayınız. O şüphe olduğunda, bırakın dışarı. Bu her şey için geçerli. Bu yöntemler, sınıflar, işlevsellik için de geçerlidir, Bir yöntem, bir şey içinde parametreler. Eğer herhangi bir şüpheniz varsa olmadığı konusunda içerecek şekilde bir şey, onu bırakın. Muhtemelen kesinlikle daha sonra eklemek mümkün, ama olacak Eğer bir API koydu kez dışarı almak mümkün olmayacaktır. Eğer insanlar koymak kez Eğer dışarı almak onlar kanlı cinayet çığlık olacak, bunu kullanarak olacak. Yani, eğer hiç dışarı bırakın, bir şey eklemek konusunda herhangi bir şüpheniz var. Hepsi Ve eğer take away Sizinle bugünkü konuşmasından sonra, ben senin saatlik değer olmuştur düşünüyorum. Tabii ki var sadece benim karar. Her neyse, - bir API boyutu hakkında düşünüyorsun zaman, kavramsal Ağırlık toplu daha önemlidir. Toplu olarak, ben yöntemlerin sayısı ortalama sayısı sınıf, numara parametreleri. Ne gerçekten önemli kavramlar sayısıdır. Ne zaman Bu API öğrenme yaşıyorum, kaç farklı şeyler ben öğrenmek gerekiyor? Ve orada bir API kavramsal ağırlığını azaltmak için bir kaç yolu vardır. En önemli biridir arayüzleri tekrar kullanılması. Yani, örneğin, orada, koleksiyonunun çerçevesinde bakarsak set arayüzünün birçok uygulamaları vardır, bunu TreeSet olsun, biliyorum. Orijinal olanlar, bilirsin, TreeSet bir HashSet vardı ve sonra biz daha yakın bir LinkedHashSet eklemek Eşzamanlı set uygulamaları bir bütün öldürdü. Herhangi bir yeni API'leri öğrenmek zorunda değilsiniz. Sen bilirsin, Set API öğrenmek ve yeni işlevler ekleyebilirsiniz, size yapmadan zenginliğinin edebilirsiniz Herhangi bir yeni API öğrenmek. Yani, ağırlık oranı gücünü artırmak için harika yollardan biridir. Önemli olan bu. Sen çok şey öğreniyorum olmadan bir sürü yapabilmek istiyorum. Uygulama API etkilememelidir. Bir kez daha bu annelik ama ne yapar Gerçekten mi? Bu API içine herhangi bir uygulama ayrıntılarını koymak anlamına gelir. Onlar kullanıcıları karıştırmayın ve onlar karar özgürlüklerini inhibe eder. Onlar uygulayıcısı özgürlüğünü engelleyen Daha sonra API değiştirin. Yani, bilirsin, örneğin, bazı API varsa bu konuda var, diyelim telefon numaraları ancak bir netice istisnalar atmak ve şimdi üstüne yeniden uygulamak istiyorsanız Bazı özel veri deposu yerine bir netice veri deposu. Ama müşterileri Zaten netice durumları yakalamak için çalışıyoruz. Biliyor musun, ne yaparsınız? Peki, sen taklit edebilir Bu yaş netice istisnalar ama bu delilik. Yani sen emin olmalısınız demektir Eğer atmak istisnalar geri kalanı gibi soyutlama aynı katmanda tür vardır API olduğunu. Bu uygulama detayları tür API'ler içine sızan sadece bir örnek. Önemli olan aslında bir uygulama ayrıntı ne olduğunu farkında olmak zorunda olduğunu. Sen yöntemlerini belirlemek üzerindeyse istemiyorum. Bir yöntemin özelliklerini istemiyorum Uygulama detaylı bir şey dahil etmek ve muktedir istiyorum Daha sonra değiştirmek için. Yani, burada yaptım bir örnek. Senin karma belirtmek etmeyin fonksiyonlar. Eğer değer karma tarafından döndürülen tam olarak ne, biliyor musun, düşünebilirsin Kod yöntemi spec uygun bir parçasıdır ama değil. Bu bir uygulama detay. spec sadece yüksek olasılık tamsayı ile, biliyorum, bir tamsayı döndürür söylemek gerekir ve İki farklı nesneler için farklı olacaktır ve ayrıca hesaplamak için ucuz olmalı Şey. Ama sayı döndürülen tam olarak ne değiştirmek için esneklik olmalı size eski hash fonksiyonları kusurları hakkında bilgi olarak serbest bırakılması o serbest ve teknoloji geliştirir ve aynı hash fonksiyonları iyileştirmek. Tabii ki, yapamam eğer Eğer kalıcı bir veri deposu yazıyoruz. Bu hash fonksiyonları için kullanmak için gidiyoruz diskte veri depolamak sonra değiştiremezsiniz. Ama bu hash fonksiyonu çok özel bir tür. Bu olanlar, belirtilen ama olmalı orada hash fonksiyonları büyük çoğunluğu olmamalı olacak. Ve biz Java ilk sürümlerinde çok yanlış, bu var ve ne yazık ki gelenek Neredeyse bütün bu hash fonksiyonları belirtilen noktaya sıkışmış. Ama onlar Gerçekten olmamalıdır. Son olarak, tür sadece uygulama ayrıntılarını izin vermemeliyiz API içine sızdırıyor. Örnek ben bir istisna nerede bir örnektir ile daha önce verdiği Eğer gerçekten onlar hakkında sert düşünmek ve evet, sen we should biliyorum "demedim, biliyorsun Belki burada bir netice istisna. "Muhtemelen sadece yazdım ve sen gerçekleştirilen" Gee, Ben bir netice istisna atar şey arıyorum, bu yüzden dışarı yaymak zorundayız. " Bu bir uygulama ayrıntı sadece sızıntı tür bir durum. Başka bir örnek, sadece derseniz Java gerçekten azılı bir örnek "seri uygular." olduğunu Bunu yaptıktan sonra, tüm uygulama sadece sıralama parçası olarak dışarı sızdırılmış sizin API seri formu bile nesne oluşturan tüm alanın oluşur, çünkü Özel alanlar, yani aniden özel alanları kamu parçasıdır API ve gerçekten çok kötü. Ve bu arada etrafında yol tasarlamaktır sizin dikkatli bir şekilde seri formlar. Sadece seri uygulamak söyleme. Sen erişilebilirlik en aza indirmek gerekir her şeyi. Bu sizin sınıfları, üye, senin alanları, tüm yapmak gerekir anlamına gelir, mümkün olduğunca özel olarak. Spesifik bir vaka kamu sınıflar hiçbir kamu sahip olmasıdır Gerçekten alanlar değil kendi sabitler, dışında alanlar. Bu en üst düzeye çıkarır Onlar bilgi gizleme dediğimiz. Parnas bu terim ile geldi adam. Ve o en aza indirir - API'leri arasındaki bağlantıyı en aza indirir. Şeyler tür gizliyse Biliyorsun, arası modüler sınırları arkasında, serbestçe değiştirebilirsiniz edilebilir. Ve bu modüller veriyor optimize ayıklanmış, test ve ne için inşa edilecek, kullanılacak anlaşılmalıdır tek tek ve paralel var. Birden ekipleri olabilir Yani, ilgilenen, biliyorum aynı anda birden fazla API'leri ile. Öte yandan API'ler tür şeyi açığa durumunda ve her bilirsin, modül tür sonra çok var, diğer modüller ile karıştırmasını olduğunu Biraz bunun etrafında modül bütün bir yığın etkilemeden herhangi bir modül için yapabileceğiniz. İsimler çok önemli. Isimler önemi yok düşünüyorum ve bazı insanlar vardır, Biliyorum, ne zaman oturup diyorsunuz ki, "Peki, bu doğru adında değil." Onlar boşa harcamayın "diyorlar senin zaman. Sadece devam edelim. Bu yeterli. "Kullanılmış olacak bir API İsimler Başkasının ve bir kaç ay içinde kendinizi içeren tarafından, bir sürü kötü önemi. Fikir, her API biraz dil türüdür ve insanlar kim kullanmak için gidiyoruz aşağıdadır API o dili öğrenmek zorunda ve o dilde konuşmak ve o isimler gerektiğini anlamına gelir büyük ölçüde kendi kendini açıklayıcı olabilir. Sen şifreli kısaltmalar kaçınmalısınız. Orijinal Unix Yani Bence isimleri, sefil bu bir başarısız oldu. Sen tutarlı olmalıdır. Bu çok önemli Aynı sözcük size API defalarca kullanılan aynı şeyleri ifade eder. Ve bu Eğer aynı şeyi yani birden fazla kelime yok. Yani bize bir kaldır var diyelim ve aynı API silin. Bu hemen hemen her zaman yanlış. Sen ne fark, biliyorum arasında kaldırmak ve silmek istiyor musunuz? Eh, ben bilmiyorum. Ben bu iki şeyi dinlemek, onlar gibi görünüyor aynı şey demek için. Onlar aynı şey demek yaparsanız, o ikisini aynı şeyi diyoruz. Onlar yoksa, o zaman nasıl farklı söylemek için yeterli isimler farklı kılar. Eğer onlar denirdi, o Kaldırma açık bir fazla oldu bilemez, en silmek ve çıkarmak diyelim - daimi Böyle kaldırılması ya da bir şey tür. Sadece siz değil tutarlılık için çaba ama Eğer simetri için gayret göstermelisiniz. Yani, API varsa, en eklemek ve kaldırmak, iki fiiller diyelim ve iki isimler, giriş ve anahtar, ben anahtarı eklemek, girdi eklemek, bilirsin, görmek istiyorum, kaldırmak giriş ve anahtarı çıkartın. Bunlardan biri eksikse, bunun için çok iyi bir nedeni olmalıdır. Ben tüm API simetrik olmalı ancak bunların büyük bir yığın gerektiğini söylemiyorum. Ve eğer Eğer doğru kod nesir gibi okuyacak olsun. Bu ödül bu. Yani, sen, biliyorsun Aracın hızı iki katından fazla bir hız limiti ve hoparlör ise bu durumda kod ", okur Polislere dikkat diyor uyarının oluşturmanız gerekir. "Bu oldukça fazla İngilizce var. It nesir gibi okur ve API makul nezih bir göstergesidir bu. Belgeler de önemli. Ve Parnas, yukarıda belirtilen Parnas yüzden, o ı could çok daha iyi dedi Ben sadece onun söylediklerini okumak için gidiyorum. O Tekrar çok daha kolay bir şeydir "dedi yapmak için daha söylenecek. Bunu yaparken iyi bir tasarım ve çok iyi dokümantasyon gerektirir. Hatta biz iyi bir tasarım görünce, seyrek hala hangi biz olmadan yeniden bileşenleri görmezsiniz İyi belgeler. "O, Ve 1994 yılında bilirsin, senin hakkında bilmiyorum ama dedi ne zaman - Ben dini olsun okuduğumda. Ve ben o zaman yapabileceğim tek şey belgelemek için dini. Her sınıf Belge, her arayüz, her yöntemi, her yapıcı, Her parametre ve benim ortak API her istisna. Tabii hepiniz bunu, sağ? Web'de gittiklerinde Javadoc bakmak ne zaman ve bu durum hep olduğunu her kamu veya korumalı yöntem, doğru bir Javadoc yorumunu var? Hayır o gerçekten biliyorum korkunç bir yorum yoksa şartname, neyin ne olduğunu söylüyorum çünkü özelliğidir? Kim bilir? İki seçeneğiniz var. Ya çok durumda, sanırım Programınız muhtemelen işe yaramazsa veya bu durumda, uygulama kodu okumak şartname olur ve belirtilen bitti ve artık değişim özgürlüğüne sahip tüm bu uygulama. Yani her şeyi belgelemek ve orada - bilirsin, bu ortalamayı ne sınıflar için? Sadece bu sınıfın bir örneği neyi temsil ettiğini söyle. Yöntemleri, söyle Beni yöntem ve müşteri arasında sözleşme. Yani ben önce doğru olması gerekir ne Bunu aramak. Döndürür ve herhangi bir yan etkisi sonrasında gerçek ne olacak. Bunlar özellikle şunlardır Önemli. Eğer yan etkisi vardı ve bunları belgelemek yoksa, insanlar kendilerini vuracak Ayaktaki. Daha sonra bu bir örnek vereyim. Parametreler için, insanlar genellikle unutur. Sadece "blok Hmm, boyutu." Deme Bu bayt veya blok boyutu var megabayt ya da her neyse. Bir eğer sen, birimler, form ne bana söylemelisin Dize, özellikle. Bilmem lazım. XML mı? Bu dize içinde ne biçim biliyorum ve nihayet, mülkiyet. Ben bir API içine bir nesne geçiyorum, ben hala sadece itiraz mı? Ben onu öldükten sonra değiştirmek için özgürüm ya da benim öz sahiplenmesini transfer var nesneye hangi ı diğer nesne geçti mi? Eğer tanımlarken şey yani, değişken modifiye edilebilir, o çok dikkatle devlet alanı belgelemek zorundadır. Eğer kötü belgelenmiş boşluk varsa - devlet alanı, o zaman edememek umudumuz yok Düzgün bu API kullanmak için. Insanlar bilemezsiniz çünkü ne ve ne aramak için yasal olduğunda Çağrı yapıldıktan sonra gerçekleşir. Bu başka bir yerde ama nasıl bir örnek tartışabilir Çok kötü bizim tarih ve takvim, Java özellikle takvim API bunu. Durum uzayı neredeyse belgelenmemiş ve zamanla çok sayıda böcek neden oldu. Mutluyum birkaç gün önce, Güneş herhangi JSR peşinde olacağını karar, bu arada söylemek [belirsiz] zaman ve kim bilir kısmen dayalı tarih ve takvim API'ler geliştirmek için Ne yoksa. Ama benim için - biz nihayet o karmaşa ücretsiz biliyor olabilir. Sen düşünmelisiniz API tasarım kararlarının performans sonuçları. Bu eğilimi çünkü bu, komik tavsiye çelişiyor, biliyorum. Hepiniz biliyorsunuz, duydum, erken optimizasyonu kötülük. Aslında, etkili Java bu konuda eski bir kompozisyon var. Bununla birlikte, bu demek değildir Sadece performans göz ardı edebilirsiniz. Jon Bentley, bu gerçeği büyüktü. Ve özellikle de, kötü API kararları performansı sınırlayabilir çıkıyor. Sınırlayabilir şeylerin örnekleri o bir kurucu sağlayarak, bu değişmez ya da tam tersi olması gerekirken tipi değişken yapıyoruz yerine bir arabirim yerine bir API uygulama türünü kullanarak statik fabrikanın, hangi insanlar her zaman bile iyi eğer belirli uygulaması kullanmak zorunda olacağı anlamına gelir biri daha sonra birlikte geliyor. Ama bu converse, performans elde etmek için bir API işe asla. Arada bir sen tür geçici kırık bir şey var. Bunu biliyor şey yavaş ve bu yavaş şeyi önlemek için ise, sizin API bölünürler. Şey Yavaş almak için kullanılan hızlı olur ama API hala bozuldu, biliyorsun. Yani, tasarım senin Uzun mesafe için API'ler. Neyse ki, iyi API tasarımı genellikle iyi bir performans ile çakışmaktadır. İşte kötü performansa yol açan bir API tasarım kararı bir örnek. Orijinal AWT, bir boyut olarak adlandırılan bir şey vardı. Bir bileşen vardı ve sizin için sorarsanız onun boyut, iki koordinat bulunan bir boyut nesnesi, döndüm. Bu sadece çift var sarılmış uzun ürün. Sorun boyut nesne değişken olmasıdır. Bunlar uzun gerçekten sarılmış değil. Biliyor musun, onlar vardı - onlar değişken, kamuya görünür alanlar. Ve bu getSize denilen her zaman olduğu ne anlama geldiğini, bir tahsis vardı yeni boyut nesne, aksi takdirde ben, bilirsin, boyut nesne olsun, bunu verebilir, çünkü Size, bunun için sormak olabilir ve o zaman da onun kopyasını değiştirme değiştirmek gerekebilir. Ve bu gerçekten kötü olurdu. Şimdi bu iki, sen bağımsız konuları veya hesaplamaları bilmek pis yollarla birbirine bağlı olacaktır. Kötümü? Bunu gerçekten ayırmak pahalı, biliyorum İki uzun ürünler içeren küçük bir nesne? Hayır, bu kir ucuz ama ne yazık ki bu şey Yani goyap kez denilen kelimenin tam anlamıyla milyonlarca milyonlarca alır, bilirsin, birdenbire, temelde çöp megabayt tahsis ediyoruz ve bu gerçekten maliyeti nedir. Bu çöp Sadece ihtiyacım yok kollektör basıncı. Ve bu yöntemler eklenerek 1.2 giderilmiştir O değişmez aslında ilkel bir tür olarak tek tek her boyut dönün. Ama, ne yazık ki, 1.1 API'leri kullanılan eski kodlar hala yavaş ve irade her zaman biliyorum yavaş. Yazdığınız API'ler platformu ile barış içinde bir arada var. Bu nedenle, bu araçlar Bu o platform için alışılmış olanı yapmak zorundayız. Bunu adlandırma kurallarına uymak zorundadır. Sadece bu platformda verboten oluyor şey kaçınmak gerekir. Sen, her ne olursa olsun, biliyorum Eğer java iseniz C iseniz, ++, biliyorum, herkes belli olduğunu bilir Sadece yapmaması gereken veya kullanmamalısınız şeyler. Yani, bu şeyler ve daha sonra ne olduğunu öğrenmek bunları önlemek. Ve orada - size tuzaklar ve tuzaklar söylemek kitaplar genellikle vardır Her platform için. Ben bilirsin, Java için bir tavsiye ama olabilir. Her neyse, bir şey herkes, çünkü desen ve platformda çekirdek API'leri taklit yapmak lazım kim bir platformdur çekirdek API'leri bilir kullanır. Yani, API sadece çekirdek biri gibi hissediyorum eğer API'ler, o zaman herkes, zaten çekirdek API zaten bilecek nasıl kullanacağımı biliyorum çünkü nasıl API kullanmak için. O kadar basit. Ve burada gerçek tuzak asla gerektiğidir sadece API'leri transliterasyon. Bu bir API tasarımı kötü bir yoldur. Ve ben ne demek istiyorsunuz O? Bir C ++ API olduğunu varsayalım ve aynı tesisin bir Java sürümünü istiyorum. Ne yapmak gerekir her C ++ sınıf almak ve içeren bir tamamlayıcı bir Java sınıfı yapmak olduğunu Sınıfta C ++ gibi tüm aynı yöntemler nedeniyle neredeyse kesinlikle C ++ makul ne Java ve tersi mantıksız. Yani, temelde bir adım geri almak zorunda. Sen have to say, "Ben Java ile bunun nasıl yapıyor bu sınıf ve ne olacak?" Bu doğru Bunu yapmanın yolu. Dönüştürülümünden API'ler hemen hemen her zaman kırılır. Tamam. Sınıf tasarımı, ben konuşma geri kalanı - bütün bitirmek için 15 dakikanız var. Bu beni beş dakika veriyor Yani Sonraki üç bölüm ve son bölüm için sıfır dakika her. Yani, ilk tüm değişebilirlik en aza indirir. Çok iyi bir nedeni olmadığı sürece Sınıflar iletmenin olmalıdır Onları kesilebilir hale getirmek için. Ve avantajları olsun sınıf basit, onlar are parçacığı güvenli, bunlar - kullanımlık örneklerini. Sen yeni bir tane oluşturmak zorunda kalmazsınız. Tek dezavantajı, her değer için ayrı bir nesne ihtiyaç vardır. Yani, eğer büyük bir nesne, en bir milyon hane uzunluğunda büyük bir tamsayı diyelim ve bunu atmak istiyorum ama Sadece geçen biraz değiştirmek istiyorum, bu değişken olsaydı, sen yerde bunu yapabilir, bilirsin, neredeyse hiçbir ücret ödemeden. Onlar değişmez çünkü Ama, temelde bir megabit kopyalamak zorunda Verilerin ardından biraz tatsız eski megabit, atmak. Ama eğer şeyler kesilebilir yapmak zorunda ve sık sık yapıyorsunuz, yine onları da iletmenin yapmak gerekir olabildiğince. Onlara güzel bir küçük, iyi tanımlanmış devlet alanı vermelidir. Sen yapmak gerekir açık - hangi yöntemi çağırmak için yasal olduğunda bunu açıkça yapmalıdır. Yani, kötü örnekler, Ben daha önce de belirtildiği gibi, tarih ve takvim vardır. Takvim rulo gibi, bilirsin, bu vardır ne devlet bilir yöntemi ve sen bilirsin zaman, bunu içine tarih koymak, bunun arkasında mı? Ne zaman ne diyoruz yasal mı? Ne devlet takvimi bunu kullandıktan sonra eğer var? Ve sen, bir tarih biçimlendirici kullanılırken bir iş parçacığı bir tarih kullanıyorsa biliyor muydunuz, biliyorum biçimlendirici ve diğer iplik aynı anda kullanmaya çalışır, her iki iş parçacığı ıslatılacağız. Sen bunun içinde devlet sahip olması dışında biliyorum, bu tür, değişmez bir nesne gibi hissediyor. Yapamazsınız Bu devlet okumak ama var. Sen bunlar, biliyorum, bu yüzden - bunlar daha fazladır şeyler onlar olmalıdır daha değişken. Bunun iyi bir örneği TimerTask olduğunu. Bu değişmez değil, ama en aza indirir değişebilirlik. Bir temsil ettiği, özellikle bir TimerTask doğal değişkendir Gerçek veya geçerli hesaplama ve mutasyon. Ama, biliyorsunuz, bir TimerTask, ne? Sen oluşturun, bunu çalıştırmak zorunda gibi, o kadar defalarca çalışır planlamak ve daha sonra öldü. Gitti. Hikayenin sonu. Şimdi, biz zamanlayıcı tasarlarken, bize sordu insanlar vardı API, "Biz biliyorsunuz, onları yeniden istiyoruz. Bu bir TimerTask yapmak pahalı gibi." Ve Cevap "Hayır, huzur içinde öleyim." dir Eğer başka bir ihtiyacınız varsa, bir tane ama yaptığınız Devlet Uzaydan döngü bu tür ortadan kaldırarak, API çok daha basit ve çok yapmak daha az hata eğilimli. Bunu yapmak için yaptığında sadece alt sınıf gerekir. Bu Liskov Değişiklik olduğunu İlke. Ve aslında çok basit. Sadece kendinize bir soru sormak zorundayım. Eğer bir kamu API iki sınıf var ve ne zaman alt sınıf bir yapım düşünüyoruz başka barda bir alt yoluyla olduğu gibi, "her bir bar foo mı?", kendinize sorun Eğer sen bir yüzle cevap verebilir, o zaman bir alt olun. Değilse, yok. Yani, bir kötü örnek Java özelliklerinde Hash tablosu uzanır olduğunu. Her tesisin nesnenin bir Hash tablosu mı? Gökler, hayır. Bir tesisin nesne belirli bazı dizeleri Haritayı özel bir şeydir Diğer bir dize. Yani, her tesisin nesne, belki bir karma tablo vardır. Tipik haliyle, bu kadar bir üst Hash tablo uygulanan ama o cevabı cevap veremediği - bir soru ile Yığın hakkında bir düz yüz ya da ne Vector uzanır? Her bir vektör yığını mı? Hayır itmek ve yığınlar üzerindeki pompa ve hemen hemen tüm bunları yapmak var. Ayrıca göz olabilir yöntemi ile bir boyut yöntemi. Ama, bir vektör ile erişme, rastgele erişim sağlar biliyorum endeksi, bir yığın değildir. Yani, Stack Vektör uzanır olması gerçekten yanlıştı. Ve bu konuda gerçekten kötü bir şey onlar uzakta gayrimenkul büyük parça aldı oldu. Biz kullanamazsınız Aslında adı vardır, çünkü artık yığını uygulamak yapan bir sınıf için isim yığını alınmıştır. Set İyi Koleksiyonlar uzanır. Her bir koleksiyon ayarlanmış mı? Evet, gerçekten olduğunu. Set bir koleksiyon sadece özel bir türüdür. Bu yinelenen izin vermez bir koleksiyon var elemanları. Bu oldukça tartışmalı bir tanesidir. Ama tasarım ve belge gerektiğine inanıyoruz , düpedüz onu yasaklamak başka miras veya bir sınıf son sınıf yapmak veya var halka açık bir kurucu hayır. Bunun nedeni, bir de kalıtım ihlal olduğu ince bir şekilde - bir encapsulation içinde. Ve o sınıflara kapsüllemeyi ihlal demek ki Bir şekilde o sadece metot çağrımı yok. Bu zaman kırılgan olarak adlandırılır Eğer bir sınıf var temelde eğer temel sınıf sorunu, bu ikinci tepesinde uygulanan nerede sınıf. Ve birinci sınıf bir yöntemini geçersiz kılar. Diğer davranışını değiştirebilir Bu yöntemlerin özgün uygulamaları sevk çünkü alt sınıfta yöntemleri Sadece overrode yönteme. Ve sonra gelecekteki uygulanması halinde süper sınıf, onlar, bu yöntemlerin hepsi uygulamak re ki bu yöntem artık isimli Bu bir yönünden uygulanan ancak her ikisi bazı üçüncü açısından uygulanmaktadır yöntemi. Ardından, bilirsin, süper sınıfın bu yeni sürümü alt sınıfı kıracak. Ve Bunu önlemek için bir yol ya her yöntemi her kullanır tam olarak nasıl temiz gelmek olduğunu yöntemi. Bu bir sınıfın kendini kullanım modellerini belge olduğunu. Eğer, yaptık Eğer belgelenmiş ve miras için tasarlanmış. Yani, olmayan final yapmak tamam. Aksi takdirde, Sadece son olabilir. Java API bakarsanız Şimdi, biz pek çok yerde bu yanlış var. Bu nedenle, J2SE kütüphaneleri beton sınıfın en, özellikle, koleksiyon sınıfları gibi HashMap ve HashSet. Hepsi olmayan nihai, ama tam olarak kendi kendine kullanım tanımlamak yok desenleri. Yani, biraz kırılgan konum. Özet seti ve soyut harita ve diğer soyut xxx sınıflar iyidir. Onlar gerçekten tasarlanmış ve miras için belgelenmiştir. Tamam, üzerine yöntemleri. Yani, bu - Bugün konuşmak sadece iki şey hatırlıyorum eğer, bu ikinci şey. Hatırlıyorum söyledim ilk şey neydi arada? >> [Belirsiz] >> BLOCH: Mükemmel. Şüpheye düşerseniz, ayrılmak dışarı. İkinci bir müşteri modülü yapabileceği bir şey yapmak yapmazlar vardır. Bunlar iki şey API tasarımının temel kuralları gibidir. Yani, en kötü şey yapabilirsiniz yapmak ve dışarı sadece giriş ve çıkış aramak için müşteri gerektiren bir API yazma ve Sadece ikinci çağrıya ilk çağrı önemsiz geçen çağrı tekrarlandı yapıyor. Bu nedenler Bunu gördüğünüz gibi Demirbaş kodu, kırmızı. Gerçekten, gerçekten kötü. Neden Demirbaş ise Kod kötü? Bu hatalar için bir fırsat olduğundan, kesme ve yapıştırma yaparak Demirbaş kodu yapmak ve daha sonra değiştirebilirsiniz. Tüm değişiklik yapmazsanız Ama sen-meli, hala olabilir derlemek ama doğru olanı yapmak olmaz. O sinir bozucu, çirkin ve hata eğilimli. Ve burada W3Cs DOM API gerçek bir canlı bir örnektir. Elinizde bir XML belge var varsayalım ve bir çıkış akımına yazdırmak istiyorum. Bunu yapmak çok makul bir şey. Olmalı bilirsin, baskı çağrıyı almak, bir çıkış akışı alır ve bitirdiniz. Ama öyle değil. Burada aslında yapmak zorunda şeydir. Önce ithal etmek zorunda, w3c.dom ek olarak, Bu güzel ve java.io, ayrıca XML Transform ithal etmek zorunda, xmltransform.dom ve xmltransform.stream. Neden? Bilmiyorum ama ben bunu yapmak zorunda biliyorum. Ve sonra burada Çağrı nasıl baktım gerekir. Bu belge, bilirsin, Sağ Doc çağırdı ve been gerekir belki alıcı olmuştur ve bir çıkış akışı geçmek ve it would gerekirdi IO istisna. Ama burada gerçekten yapmak zorunda budur. İlk olarak, bir transformatör almak ve bir transformatör nedir? Bilmiyorum, ama bir tane ihtiyacım olduğunu biliyorsun. Nasıl alabilirim? Peki, Eğer trafo fabrikasında yeni örnek yöntemi almak ve o size bir transformatör verir fabrika ve size yeni bir transformatör için sormak fabrika aldıktan sonra. Yani, gördüğünüz gibi, Onlar tasarım desenleri okudum. Bu harika. Bu desenleri ile benzeri dolu. Yani şimdi, sen var senin trafo fabrikası dışarı trafo var ve sonra bir çıkışı ayarlamak zorunda Düzgün o transformatör üzerinde. Sen doktor tipi olma doc tipi sistemini ayarlamak zorunda doc. Ben bu aracı ne herhangi bilmiyorum ama ben bunu tüm yapmak zorunda biliyorum. Ve sonra, sistem kimliği almak zorunda ve var - bu çıkış parçası Eğer ayarladığınız özellik. Tüm bitince Ve sonra, aslında çıkış yapabilirsiniz. Bunu yolu trafosu üzerinde dönüşüm diyoruz olduğunu. Ve sadece geçemiyor doc kaynağında o doğru olanı uygulamak değil çünkü. Sen adaptör deseni kullanmak burada doc almak ve ayrıca daha sonra bir DOM kaynağına çevirmek ve yapamazsın oldukça Sadece çıkış akımına geçer. Bir dere sonucunda sarın ve şimdi almak senin Çıktı, değil mi? Bir küçük sorun dışında hangi bir transformatör istisna olabilir mi? Ne zaman onu atabilir? Eh, aslında hiç ama API bu olabilir diyor ve bir kontrol var istisna, bu yüzden bunun atılmış alırsa onu yakalamak zorundayız ve o zaman orada bir ekleme atmak o asla çünkü. Yani, bilirsin, bu altı satır ne olursa olsun, böyle var Sadece okunmaz çöp kodu size çok basit bir şey vermek. Onlar kullanılmış başladıysanız dava, insanların xml belgeleri yazdırmak isteyebilirsiniz. Sen fikir olsun. Bir başka genel Eğer sınıf tasarlarken yaparken kural - bir yöntemdir, En şaşkınlıklar Prensibi ihlal yoktur. Bir API kullanıcı davranışı sürpriz asla. Bu değer ekstra uygulama var çaba. Hatta bazen değer bir azalma performans kullanıcılarını sürpriz değil sizin API bunları sürpriz çünkü eğer, ne olacak? Onlar sadece yanlış bir şey yapacağım. Onlar bir şey yok düşüneceğim aslında başka bir şey yapacağım ve onların programı olacak kırık. İşte Java iplik API gerçek bir örnek. Yani, biz bu yöntemi çağrıda bulundular kesildi. Bir iş parçacığı var ve bunu kesintiye eğer kontrol etmek istiyorum. Sen thread.interrupted çağrı. Ve ne yapar? Peki, geçerli iş parçacığı kesintiye olup olmadığını test eder. Oh ve bu arada, bu geçerli iş parçacığının kesilen durumunu temizler. Bu sadece bu küçük bir yan etkisi gibi. Mevcut parçacığının kesilen durumunu temizler. Baktığımızda isim, bilirsin, thread.interrupted, bu yapar tahmin yolu yoktur olacağım. Ama Bunu yapar ve birçok kişi var, şimdi, çünkü o bitmez saat geçirdim. Sen Bu çağrı yapar birincil şey ne biliyor musun? Bu kesintiye durumunu temizler. It değil mantıksız bir çağrı ama net kesme durum tarafından seçildi gerekirdi yol, bu size bir iyilik olarak eski kesme statüsünü iade olabilir. Ama onlar adında Bunun yerine ilk en önemli, o yüzden yaptım, ikinci en önemli şey - dayalı şey yaptım. Ve bunu yaparken de, onlar Az şaşkınlık bu prensibi ihlal etti. Sen Hızlı başarısız olmalıdır. Bir hata var zaman, en kısa sürede API kullanıcıyı söylemelidir mümkün olduğunca hata oldu sonra. İdeal olarak, derleme zamanında ona söylemelidir, Bu yolu laboratuarda ya da olur çünkü, biliyorum, nerede programı burada, biliyorum programı çalıştırmak olduğunu alanında yerine out, yazılı ediliyor. Ve araçlarının ben statik yazarak çok iyi bir şey olduğuna inanıyorum. O kadar runtime hataları hamle derleme zamanı. Ben bu başka bir konu oldukça tartışmalı olduğunu anlıyoruz. Ama ben inanıyorum o. Biliyor musun, ben bu gerçekleşti gördüm. Sen Örneğin, statik yazarak arttı biliyorum jenerik ekleyerek Java. Zorla çünkü, bilirsin, kod önceden var olan böcek bulundu Bana beklenen türleri hakkında daha spesifik olmak ve onlar beni nereye anlattı etmek şeyler yanlış. Yalnızca çalışma zamanında bir hata bulmak mümkün olacak iseniz, Eğer yanlış bir şey yapmak ilk defa öğrenmek istiyorum. Mesela, bazı çöp geçirirseniz başka bir şey, en kısa sürede size değil, on dakika içinde çöp geçerken öğrenmek gerekir Daha sonra. İşte bunu nasıl değil örnektir. Yukarıda bahsedilen özellikler sınıfında Bu karma tablo uzanır. Eğer spec bakarsanız, bu örnek dizeleri haritalar özelliklere sahiptir dizeleri. Bu put çağrısı bakarsanız Ancak, bir nesne anahtarı ve bir nesne değeri alır. Herhangi bir nesne, belki bir dize, başka belki bir şey, ama hemen eğer geçerseniz size söyler bir şey bir dize doğru, değil mi? Keşke öyle idi. Bu, aslında, söylemez hemen size. Bu, daha sonra on dakika sonra zaman istediğiniz herhangi bir çöp koymak ve sağlar Eğer denemek - temelde onun malı en götüren çıkış akışı, çağrı kaydetme çağırdığınızda nesne ve oldukça XML olmayan bazı çöp çevirmek. Sadece o zaman yapar Eğer on dakika içine yanlış bir şey koymak, çünkü bir sınıf dökme istisna ile havaya uçurmak daha önce. Ama o zamana kadar, hata ayıklama neredeyse imkansız hale gelir. Sen nerede bilmiyorum Çağrı sizin özellikleri nesne içine çöp koymak oldu. Sen programlı erişim sağlamalıdır Ayrıca dize şeklinde kullanılabilir tüm verilere. Bu çok önemli. Ne zaman seni Ayrıca döndüren bir yöntem olmalıdır bir dizge olarak bir şey dönmek bir yöntemi var programlı biçimde aynı şeyler. Bunu yapmazsanız, o zaman istemciler ayrıştırmak zorunda kalacak dize. Sadece bir popo ağrı ama de facto haline dize döner olduğunu API parçası. Kod orada var çünkü o dizeye bilgi eklemek asla bu dizeyi duraklatma söyledi. Eğer dize biçimini değiştirmek Ve eğer bu kodu kırmak. Peki, ne yapmalıyım yapmanız gerekir, size yazdırılabilir dize verir API ile birlikte olduğunu Gerçek bilgi ve bu şekilde, afedersiniz - Sen erişmenizi sağlar diğer API'ler var daha sonra dize daha fazla bilgi ekleyebilirsiniz. Ve aslında, spec demeliyim Eğer dize biçimini belirterek değildir ve kod yazıyor o kimse ayrıştırmak için Dize kendi eline hayatlarını alıyor. Yani, bilirsin, kötü bir örnek başlangıçta olduğu , üzgünüm baskılar - Java yığın izleme almak için tek yol bu yığın olur aramak oldu Yığın izleme API ve insanlar aslında bu şeyleri ayrıştırmak gitti. 1.4, biz nihayet eklendi Size aynı bilgileri kapsayan bir yığın iz element veren yığın izlemesi API olsun vb dosya, bir satır numarası, sınıf adı ve. Ama bu tür bir olgu oldu Atın zaten ahır bırakmıştı. Sen dikkatli aşırı yük gerekir. Yöntem aşırı yükleme iyi bir şey olabilir ama gereksiz eğilimi olabilir. Sen belirsiz aşırı yüklenmesini önlemek gerekir. O aynı değerleri geçtiğinde farklı şeyler yapabilirsiniz birden aşırı yüklenme olduğunu. Ve Kendimi burada suçlu olduğumu kötü örnek, bir TreeSet iki kurucular vardır; bir o koleksiyonu, sıralanmış bir dizi alır birini alır. İlki sırasını göz ardı geçirildi şey. İkincisi ise Gee, ben başka yola çıkan bir ağaç yapıyorum "diyor Sıralanan seti, ben de aynı şekilde sipariş olabilir. "Eh, burada sorun. Eğer Bir koleksiyona döküm oluyor bir sıralanmış dizi var, o zaman bu kurucu çağırmak ve konum tek sonuç almak. Oysa bunu döküm yoksa sadece geçmesi durumunda,, başka bir olsun Sonuç, bu yüzden gerçekten bu şekilde yapmamam gerekirdi. Ben bir dinamik testi yaptık gerekir. Eğer şey o zaman sipariş korunmuş gerekirdi, set sıralı örneği oldu. Sen bilirsin, Eğer gerektiği anlamına gelmez, çünkü burada temel kural sadece olduğunu. Çoğu zaman, daha iyi olur sadece yüklenme daha bir şey başka bir isim vermek yerine. Aşırı yükleme gerçek olabilir tuzak. Eğer uygun parametre ve dönüş türlerini kullanmak eğer bu arayüzler iyilik gerektiği anlamına gelir belirli sınıfları edildi. Sen en spesifik olası giriş parametresini kullanmanız gerekir yazın. Eğer kabul ederseniz, diyelim ki, bir koleksiyon ama birileri geçer sürece havaya uçurmak olacak Eğer kırık bir dizi, sadece derleme sırasında yakalanmış oldum verebilecek geçtiniz Zaman ve yerine zamanında onu yakalamak ediyoruz. İşte gerçekten, sıralama, başka tuzak, değil mi Daha iyi bir tip varsa bir dize kullanabilirsiniz. Eğer XML ve web servisleri, insanlar biliyorum, bu günlerde Her zaman dizeleri ile başlamak. Dizeler web üzerinden geliyor. Sadece o kadar başlamış, çünkü bir dize o dize olarak kalmalı anlamına gelmez. Sen daha makul bir şey haline çevirmek gerekir ve orada bırakın. Ben yıllar önce bir programda gördüm bu gerçekten kötü örnek oldu yürütme onun bütün süresi boyunca bir dize etrafında geçti bir program, bu Ya evet ya da hayır. Biz boolean denir bunun için iyi bir veri türü var. Malısın Google'da noktası türlerini kayan asla kullanmayın. Siz zaten biliyorsunuz, tüm bu ama asla , kayan nokta türlerini kullanmak şamandıra veya parasal değerler için çift. Onlar yeterince iyi değilsin Para temsil etmek. Sen kayan nokta sayıları kullanarak tam hesaplamalar taban 10 yapamaz - ikili Çünkü 1/10 ikili fraksiyon olarak gösterilebilir değil aslında sayıları. Bu yüzden, bunu yapmayın. Bildiğiniz varsa, bir miktar para, büyük ondalık kullanın. Belki uzun kullanmak Büyük tamsayı ya da ne var, ancak mala ya da çift kullanmayın. Ve ile karşı karşıya kaldığınızda şamandıra veya çift kullanarak seçim, neredeyse yerine kayan nokta daha çift kullanmalısınız, çünkü Eğer bilirsin, kaybetmek, tipik çift sadece hızlı çalışır, bilir ve gerçek ve önemli float aşağı gidiş ile hassas. Bakalım, ben sadece aracılığıyla çalıştırmak zorunda gidiyorum Bu geri kalanı. Bu gerçekten önemli. Yöntemler arasında tutarlı parametre sipariş kullanın. Yani, bilirsin, burada yapılacak değil ne bir örnektir. Unix Gerçek bir örnek. Biz iki tane yöntemler veri kopyalamak için. Bir mağaza ve kopya denir. Bir b-kopya denir. Birinci biri bir hedef, bir kaynak ve bir boyut alır. İkinci bir kaynak, bir hedef alır ve Bir boyutu. Peki, diğer çağırdığınızda birileri, bir sipariş varsayar eğer, biliyorsun, ne olur yöntem? Onlar kendi hedef ne olursa olsun çöp oldu onların kaynak verilerini clobber dizi. Ve ne kadar o hatayı bulmak için sürer? Muhtemelen bir gerçekten, gerçekten uzun bir zaman. Bu iki parametre tipleri için aynı olduğunda özellikle önemlidir Onları etrafta geçerseniz, size derleme zamanında bilmeyecektir. İyi bir örnek burada olduğunu Java.util.Collections, ilk değer her zaman mutasyona uğramış ya da manipüle ediliyor topluluğudur. Uzun bir miktar Benzer şekilde, util eşzamanlı olarak, her zaman olduğu gibi bunu belirtin bir gecikme asla başka bir yol etrafında zaman birimi tarafından izledi. Ve diğer olsa bile Bu uyumsuz güçlü türleri, çünkü bir yol etrafında, derleyici size söylerdim. Uzun ve zaman birimi iki farklı şeylerdir. Uzun parametre listesi kaçınmalısınız. İdeali, üç onları sınırlamak gerekir. Bu, özellikle üç şey hatırlamak gerçekten çok kolay Eğer sorunlar nedeniyle aynı yazdığınız parametrelerin uzun bir liste kaçınmak gerektiğini Ben daha önce de söyledim. Sipariş yanlış olsun, sen hosed ediyoruz. Yani burada bir örnek yapmak değil ne. Bu bir pencere oluşturmak için, Win3 gelen API etmektir. Biliyor musun, eğer , Int x, y Orta, Orta yüksekliği ile Int sonuna bakınız ne 15 parametre bu ortasında bak. Yani, burada bu bazı şeyleri, Ints bir bütün dize biliyor ve bu arada, var başka isimle Ints, sadece Int da bulunmaktadır. Yani, bu kadar bir IDE desteği olmadan, biliyorum hemen hemen imkansız, bu API kullanmak için. Neyse ki, kısa devre için büyük teknikler vardır parametre listesi. Yapabileceğiniz tek şey bir çoklu yöntemlerle bir yöntem break up, ya da sen parametrelerini tutmak için bir yardımcı sınıflar oluşturabilirsiniz. Yardımcı sınıfının spesifik bir örneğidir Eğer bir kurucu ya da doğal alacağını statik bir fabrika var ise oluşturucu deseni, Hangi çoğu belirtmek zorunda değilsiniz çoğu 10 parametreleri, iyi varsayılan var. Bunun yerine, bir inşaatçı yapmak ve sonra sadece eklenti olanlar aslında hakkında ve daha sonra bakım Bir yapı yöntemini çağırın. Ve bu kod yazmak ve okumak için çok daha kolay olacaktır. Malısın olağanüstü işleme talep dönüş değerlerini kaçının. Özellikle, asla gerekir Bir, "Hayır," yerine sıfır uzunluklu dizi veya koleksiyon döndürür. İşte şeyin bir örnek Biz yanlış var. - Tamponlu görüntü op-sınıfta, biz ipuçları render olsun denilen bir yöntem var. Ve ya, o döndüren bir render koleksiyonu ipuçları veya "Hayır", döner Ve sonuç ne Bu? Nadiren "Hayır", döndürdüğü için bu şeyi çağırır Hemen hemen tüm kodu yanlış Yani, insanlar bu özel durum için kod unutmayın. Onlar bir olsun yoksa ne olur? Hayır gelin veya istisna ve tamamen gereksiz. Eğer onlar sadece, sıfır uzunluklu koleksiyonu döndü Daha sonra herhangi bir sıkıntı içine aldım olmaz. Yani, ben aslında kalanını atlamak için gidiyorum düşünüyorum konuşma ben zamanın dışına olduğum için. Aslında, ben zaten beş dakika daha fazla zaman kullandım Ben daha. Başka koleksiyonu var ama eğer - tekrar deneyin. Başka bir sorunuz varsa, ben olacak sonradan etrafında bir süre olması ve bana istediğiniz her şeyi sorabilirsiniz. Yani, teşekkürler Önümüzdeki. Olduğunu Ah, bir başka şey, ben var - sizin için bir ver-away var - ne zaman Ben yargılamada OOPSLA bu verdi, onlar bana bir koymak için iki sayfa verdiği - ne Bunu diyorsun? Genişletilmiş özeti gibi. Bunun yerine yapıyor, ben API yapmaya çalıştım tampon etiket tasarım. Temelde tüm bu konuşma alıp içine yıkmak için çalışacağız 50 küçük düzgülerin gibi, ne zaman şüphe, bilirsin, dışarı bırakın veya tüm programcılar API vardır tasarımcılar, bir cümlenin bir çeşit her biraz daha detaylı, bilirsiniz, nitelendirdi. Yani burada, kendinize arasında bu kadar iyi yapabilirsiniz dışarı geçmektedir. Ve ben onu yukarı koyacağım, seni know - ve kağıt parçası vardır daha sizin daha vardır durumunda JJB söyle. Çok teşekkürler Tekrar geldiğiniz için.

Açıklama

Google Tech Sohbetleri 24 Ocak 2007 ÖZET Dünyada her gün, yazılım geliştiriciler Uygulama Programlama Arayüzü çeşitli (API) ile çalışan zamanlarının çoğunu harcamak. Bazıları yaygın olarak dağıtılan çerçeveler erişim sağlar, çekirdek platformu ayrılmaz, bazıları birkaç geliştiriciler tarafından kullanılmak üzere in-house yazılır. Bunu biliyorum olsun veya olmasın Neredeyse tüm programcılar bazen API tasarımcıları olarak işlev. İyi tasarlanmış bir API yazdım organizasyona ve kullanmak herkese büyük bir varlık olabilir. İyi API'ler, sonuçta kurumsal alt satırında bunları kullanan geliştiriciler zevk ve verimlilik, ürettikleri yazılım kalitesini artırmak ve ....

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

GoogleTechTalks

GoogleTechTalks

Google Tech Talks teknik topluluğun ilgileneceği bilgi paylaşımı için Google'da bir taban programıdır. En iyi, bu dünyamızın farklı alanlarda üst uzmanları içeren ilgili devam eden bir tartışma parçası. Sunumlar çılgınca spekülatif için köklü konularda derin dalışlar en teknik perspektif Özetler geniş değişir.

YORUMLAR



9.8/10

  • 1795
    Olumlu
  • 20
    Olumsuz
  • 152
    Yorum
  • 275870
    Gösterim

SPONSOR VİDEO

Rastgele Yazarlar

  • hoorahjencar

    hoorahjencar

    6 HAZİRAN 2007
  • pucksz

    pucksz

    24 Mart 2006
  • ThreadBanger

    ThreadBanger

    2 Mart 2007

ANKET



Bu sayfa işinize yaradı mı?