Öyle KÖTÜ alışkanlık ve korkunç SATAŞMAK uygulama temel zemin sıfır fundamantalizmini anlamadan Joshua Bloch alıntı.
Joshua Bloch hakkında hiçbir şey okumadım.
- o korkunç bir programcı
- ya da şimdiye kadar onu alıntıladığımı bulduğum insanlar (Yeşu benim tahmin ettiğim bir çocuğun adıdır), sadece yazılımlarını dini hoşgörülerini haklı çıkarmak için materyalini dini senaryolar olarak kullanıyorlar.
İncil köktenciliğinde olduğu gibi, tüm İncil yasaları şu şekilde özetlenebilir:
- Temel Kimliği tüm kalbinizle ve tüm zihninizle sevin
- Komşunu kendin gibi sev
ve benzer şekilde yazılım mühendisliği köktenciliği
- Kendinizi tüm programlama gücünüz ve zihninizle sıfır noktası temeline adamak
- ve programcı arkadaşlarınızın mükemmeliyetine kendiniz için olduğu gibi ayırın.
Ayrıca, İncil'deki köktendinci çevreler arasında güçlü ve makul bir sonuç ortaya çıkar
- İlk önce kendini sev. Çünkü kendinizi çok sevmiyorsanız, o zaman "komşunuzu kendiniz gibi sevin" kavramı fazla ağırlık taşımamaktadır, çünkü "kendinizi ne kadar çok seversiniz", yukarıda başkalarını seveceğiniz veri hattıdır.
Benzer şekilde, kendinize bir programcı olarak saygı duymuyorsanız ve sadece temelleri sorgulamadan bazı programlama gurusunun duyurularını ve kehanetlerini kabul ederseniz, teklifleriniz ve Joshua Bloch'a (ve benzerlerine) olan güveniniz anlamsızdır. Ve bu nedenle, aslında programcılarınıza saygı duymazsınız.
Yazılım programlamanın temel yasaları
- tembellik iyi bir programcının erdemidir
- programlama hayatınızı kolay, tembel ve dolayısıyla mümkün olduğunca etkili hale getirmelisiniz
- programlamanızın sonuçlarını ve bağırsaklarını sizinle çalışan ve programlama bağırsaklarınızı alan komşu programcılarınız için olabildiğince kolay, tembel ve dolayısıyla mümkün olduğunca etkili hale getirmelisiniz.
Arayüz-desen sabitleri kötü bir alışkanlıktır ???
Hangi dini temelde etkili ve sorumlu programlama yasalarına göre bu dini ferman kabul edilir?
Arayüz kalıbı sabitleri ( https://en.wikipedia.org/wiki/Constant_interface ) hakkındaki wikipedia makalesini okuyun ve arayüz kalıbı sabitlerine karşı belirttiği saçma bahaneler.
Whatif-IDE yok mu? Bir yazılım programcısı olarak yeryüzünde kimler IDE kullanmaz? Birçoğumuz, bir IDE kullanımından kaçınarak, maço estetik sağkalımcılık olduğunu kanıtlamak zorunda kalmayı tercih etmeyen programcılarız.
- Ayrıca - IDE'ye ihtiyaç duymamanın bir aracı olarak mikro fonksiyonel programlamanın ikinci taraflarını bekleyin. Veri modeli normalizasyonu hakkındaki açıklamamı okuyana kadar bekleyin.
Ad alanını geçerli kapsamda kullanılmayan değişkenlerle kirletir mi? Bu görüşün savunucuları olabilir
- veri modeli normalleşmesinin farkında değil ve buna ihtiyaç duyuluyorsa
Sabitleri uygulamak için arabirimlerin kullanılması arabirimlerin kötüye kullanılmasıdır. Böyle savunucuların kötü alışkanlıkları var
- "sabitler" in sözleşme olarak ele alınması gerektiğini görmemek. Ve arayüzler bir sözleşmeye uyumu zorunlu kılmak veya yansıtmak için kullanılır.
Gelecekte arayüzleri uygulamalı sınıflara dönüştürmek imkansız değilse bile zordur. Hah .... hmmm ... ???
- Neden kalıcı geçim kaynağınız gibi bir programlama modeliyle uğraşmak istersiniz? IOW, neden kendinizi böyle bir AMBIVALENT ve kötü programlama alışkanlığına adadınız?
Mazeretler ne olursa olsun, arayüz sabitlerinin kullanımını yetkilendirmek veya genel olarak caydırmak için TEMEL ETKİLİ yazılım mühendisliği söz konusu olduğunda GEÇERLİ ÖZEL DURUM YOKTUR.
Amerika Birleşik Devletleri Anayasası'nı kuran kurucu babaların orijinal niyetlerinin ve zihinsel durumlarının ne olduğu önemli değil. Kurucu babaların asıl niyetlerini tartışabiliriz, ama tek umduğum ABD Anayasası'nın yazılı açıklamaları. Ve ABD Anayasası'nın yazılı olmayan kurucu niyetlerinden değil, yazılı edebi-köktenciliğin kullanılması her ABD vatandaşının sorumluluğundadır.
Benzer şekilde, Java platformunun ve programlama dilinin kurucularının arayüz için "orijinal" niyetlerinin ne olduğu umurumda değil. İlgilendiğim, Java spesifikasyonunun sağladığı etkili özellikler ve sorumlu yazılım programlamanın temel yasalarını yerine getirmeme yardımcı olmak için bu özelliklerden sonuna kadar yararlanmayı planlıyorum. "Arayüzlerin niyetini ihlal ettiği" algılanıp algılanmamam umrumda değil. Gosling veya Bloch'un "Java'yı kullanmanın uygun yolu" hakkında ne söylediğini umursamıyorum, söyledikleri ETKİLİ tatmin edici temelleri benim ihtiyacımı ihlal etmedikçe.
Temel Veri-Model Normalizasyonu
Veri modelinizin nasıl barındırıldığı veya iletildiği önemli değildir. Arayüzler veya numaralandırmalar veya ne olursa olsun, ilişkisel veya SQL olmayan, veri modeli normalizasyonunun gerekliliğini ve sürecini anlamıyorsanız.
Öncelikle bir dizi sürecin veri modelini tanımlamalı ve normalleştirmeliyiz. Tutarlı bir veri modelimiz olduğunda, SADECE bileşenlerinin süreç akışını işlevsel davranışı tanımlamak ve bir alan veya uygulama alanını işlemek için kullanabiliriz. Ve ancak o zaman her fonksiyonel sürecin API'sını tanımlayabiliriz.
EF Codd'un önerdiği gibi veri normalleştirmenin yönleri bile şimdi ciddi şekilde zorlanıyor ve ciddi şekilde zorlanıyor. Örneğin, 1NF ile ilgili ifadesi, özellikle modern veri hizmetleri, repo-teknoloji ve aktarımın ortaya çıkışındaki ifadelerinin geri kalanı gibi belirsiz, yanlış hizalanmış ve aşırı basitleştirilmiş olarak eleştirilmiştir. IMO, EF Codd ifadeleri tamamen terk edilmeli ve yeni matematiksel olarak daha makul ifadeler dizisi tasarlanmalıdır.
EF Codd'ların göze çarpan bir kusuru ve etkili insan kavrayışındaki yanlış hizalanmasının nedeni, insanca algılanabilen çok boyutlu, değişken boyutlu verilerin bir dizi parçalı 2 boyutlu haritalamada etkili bir şekilde algılanabileceğine olan inancıdır.
Veri Normalleştirmenin Temelleri
EF Codd'un ifade edemediği şeyler.
Her bir tutarlı veri modeli içinde, bunlar elde edilecek veri modeli tutarlılığının ardışık dereceli sırasıdır.
- Veri örneklerinin Birliği ve Kimliği.
- her veri bileşeninin tanecikliliğini tasarlar, böylece tanecikler bir bileşenin her bir örneğinin benzersiz bir şekilde tanımlanabildiği ve alınabildiği bir seviyede olur.
- örnek örtüşme yokluğu. yani, bir kimliğin bir bileşenin birden fazla örneğini ürettiği hiçbir araç mevcut değildir.
- Örnek karışma yokluğu. Bir bileşenin bir örneğinin tanımlanmasına katkıda bulunmak için bir bileşenin bir veya daha fazla başka örneğini kullanma zorunluluğu yoktur.
- Veri bileşenlerinin / boyutlarının birliği ve kimliği.
- Bileşen yumuşatmanın varlığı. Bir bileşenin / boyutun benzersiz bir şekilde tanımlanabileceği bir tanım olmalıdır. Bir bileşenin birincil tanımı olan;
- birincil tanım, amaçlanan bir bileşenin parçası olmayan alt boyutların veya üye bileşenlerin gösterilmesiyle sonuçlanmaz;
- Bileşenlerden kurtulmanın benzersiz yolları. Bir bileşen için yalnızca bir tane, böyle bir bileşen yumuşatma tanımı bulunmalıdır.
- Bileşenlerin hiyerarşik ilişkisinde bir üst bileşeni tanımlamak için bir ve yalnızca bir tanım arabirimi veya sözleşmesi vardır.
- Bileşen karışma yokluğu. Bir bileşenin kesin tanımlamasına katkıda bulunmak için başka bir bileşenin bir üyesini kullanma zorunluluğu yoktur.
- Böyle bir ebeveyn-çocuk ilişkisinde, bir ebeveynin tanımlayıcı tanımı, bir çocuğun üye bileşenleri kümesinin bir kısmına bağlı olmamalıdır. Ebeveyn kimliğinin bir üye bileşeni, bir çocuğun çocuklarından herhangi birine veya tümüne başvuruda bulunmadan tam çocuk kimliği olmalıdır.
- Bir veri modelinin iki modlu veya çok modlu görünümlerini önleyin.
- Bir bileşenin iki aday tanımı olduğunda, iki farklı veri modelinin bir olarak karıştırıldığının açık bir işaretidir. Bu, veri modeli düzeyinde veya alan düzeyinde tutarsızlık olduğu anlamına gelir.
- Bir uygulama alanı tutarlı bir şekilde bir ve sadece bir veri modeli kullanmalıdır.
- Bileşen mutasyonunu tespit edin ve tanımlayın. Büyük verilerin istatistiksel bileşen analizini yapmadıysanız, bileşen mutasyonunu muhtemelen görmez veya tedavi etme gereğini görmezsiniz.
- Bir veri modeli, bileşenlerinden bazılarının döngüsel veya kademeli olarak değişmesine neden olabilir.
- Mod, eleman döndürme veya aktarma döndürme olabilir.
- Üye-rotasyon mutasyonu, alt bileşenlerin bileşenler arasında belirgin şekilde değiştirilmesi olabilir. Veya tamamen yeni bileşenlerin tanımlanması gereken yer.
- Transpozisyonel mutasyon, bir niteliğe mutasyona uğrayan boyutsal bir üye olarak tezahür eder, bunun tersi de geçerlidir.
- Her mutasyon döngüsü, ayrı bir veri yöntemi olarak tanımlanmalıdır.
- Her mutasyonu güncelleyin. Veri modelinin 8 yıllık bir mutasyonunu tedavi etme ihtiyacı ortaya çıktığında, veri modelinin önceki bir versiyonunu çıkarabilirsiniz.
Servisler arası bileşen uygulamaları alanında veya ızgarasında, bir ve yalnızca bir tutarlı veri modeli olmalı veya bir veri modeli / sürümünün kendisini tanımlaması için bir araç olmalıdır.
Hala Arayüz Sabitlerini kullanıp kullanamayacağımızı soruyor muyuz? Gerçekten mi ?
Söz konusu sıradan sorudan daha fazla sonuçta veri normalleştirme sorunları söz konusudur. Bu sorunları çözmezseniz, arayüz sabitlerinin neden olduğunu düşündüğünüz karışıklık nispeten hiçbir şey değildir. Sıfır.
Veri modeli normalleştirmesinden sonra bileşenleri değişken olarak, özellikler olarak, sözleşme arabirimi sabitleri olarak belirlersiniz.
Ardından hangisinin değer enjeksiyonu, özellik yapılandırması yer tutuşu, arayüzler, son dizeler vb.
Arabirim sabitlerine karşı dikte etmek için daha kolay bir bileşen bulmaya ihtiyaç duymanın mazeretini kullanmak zorundaysanız, veri modeli normalleştirmesi yapmamanın kötü alışkanlığınız olduğu anlamına gelir.
Belki de veri modelini bir vcs sürümüne derlemek istersiniz. Bir veri modelinin belirgin bir şekilde tanımlanabilir bir versiyonunu çıkarabilirsiniz.
Arayüzlerde tanımlanan değerlerin tamamen değiştirilemez olduğundan emin olunur. Ve paylaşılabilir. İhtiyacınız olan tek şey bu sabitler dizisi olduğunda neden sınıfınıza başka bir sınıftan bir dizi son dizgi yüklemek?
Peki bu neden bir veri modeli sözleşmesi yayınlamıyor? Yani eğer tutarlı bir şekilde yönetebilir ve normalleştirebilirseniz, neden olmasın? ...
public interface CustomerService {
public interface Label{
char AssignmentCharacter = ':';
public interface Address{
String Street = "Street";
String Unit= "Unit/Suite";
String Municipal = "City";
String County = "County";
String Provincial = "State";
String PostalCode = "Zip"
}
public interface Person {
public interface NameParts{
String Given = "First/Given name"
String Auxiliary = "Middle initial"
String Family = "Last name"
}
}
}
}
Artık uygulamalarımın sözleşmeli etiketlerine şu şekilde başvurabilirim:
CustomerService.Label.Address.Street
CustomerService.Label.Person.NameParts.Family
Bu jar dosyasının içeriğini karıştırıyor mu? Bir Java programcısı olarak kavanozun yapısını önemsemiyorum.
Bu, osgi motivasyonlu çalışma zamanı değiş tokuşuna karmaşıklık getiriyor mu? Osgi, programcıların kötü alışkanlıklarına devam etmelerini sağlamak için son derece verimli bir araçtır. Osgi'den daha iyi alternatifler var.
Ya da neden olmasın? Özel Sabitler'in yayınlanan sözleşmeye sızması söz konusu değildir. Tüm özel sabitler "Sabitler" adlı özel bir arayüzde gruplandırılmalıdır, çünkü sabitleri aramak istemiyorum ve tekrar tekrar "private final String" yazmak için çok tembelim.
public class PurchaseRequest {
private interface Constants{
String INTERESTINGName = "Interesting Name";
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
Belki de bu:
public interface PurchaseOrderConstants {
public interface Properties{
default String InterestingName(){
return something();
}
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
Arayüz sabitleriyle ilgili dikkate alınması gereken tek sorun arayüzün ne zaman uygulandığıdır.
Bu arayüzlerin “orijinal niyeti” değil mi? Sanki Yüksek Mahkemenin ABD Anayasası'nın yazılı mektuplarını nasıl yorumlayacağından ziyade, kurucu babaların ABD Anayasası'nın hazırlanmasındaki "asıl niyeti" umurumda mı?
Sonuçta, özgür, vahşi ve cesur ülkesinde yaşıyorum. Cesur olun, özgür olun, vahşi olun - arayüzü kullanın. Program arkadaşlarım verimli ve tembel programlama araçlarını kullanmayı reddederse, altın kuralına göre programlama verimliliğimi onlarınkiyle aynı hizada azaltmak zorunda mıyım? Belki de söylemeliyim, ama bu ideal bir durum değil.