Java paket adı sözleşmesi hatalı mı? [kapalı]


28

Etki alanı adını döndürme konusunda Java paket adı kurallarına hepimiz aşinayız. Yani www.evilcorp.com, sözleşmeye göre, java paketlerini almayı seçti com.evilcorp.stuff.

Giderek bıktım bundan bıktım. Ticari bir programcı olarak, bazı marka, satın alma veya benzeri şeylerden dolayı yazılım paketi adının tamamen ilgisiz olduğu konusunda tekrar tekrar karşılaşıyorum.

Açık kaynak dünyasında daha az isim değişikliği olduğundan mantıklı geliyor. Ancak bana öyle geliyor ki, pek çok (ticari / dahili) yazılımın raf ömrü, bunları yapan organizasyonunkinden çok daha uzun.

Sorun genellikle pazarlama departmanının kullandığı du jour ismini kullanmak için önderlik eden yazılım projeleri tarafından daha da kötüleşir . İmparatorun yeni kıyafetlerini yeni ve taze hissettirmek için başarısızlıkla çizginin 3 ayını değiştirecek bir isim.

Bu nedenle, çoğunlukla ters etki alanını paket adı olarak kullanmayı bıraktım. Bu büyük ölçüde yapılırsa, isim çarpışma riski vardır, ancak bu kesinlikle "benzersiz" yazılım adları kullanılarak, genel kelimelerden kaçınarak veya kütüphaneler olarak satılması / piyasaya sürülmesi planlanan projeler için ters etki alanı kullanılarak azaltılır. .

Diğer düşünceler?


2
We're all familiar with the Java package name convention of turning the domain name around.- değiliz um..no ... :)
dr Hannibal Lecter

8
@ dr Hannibal Lecter: Oldukça basit. Java (Java.com sitesinde) paketlerini adlandırır com.java.etc.etc. Apache (Apache.org sitesinde) paketlerini adlandırır org.apache.etc.etc. Deseni görüyorsunuz.
doppelgreener


1
"Açık kaynak dünyasında daha az isim değişikliği var" - bir sorun olsa bile, çoğu zaman şu an github olarak söylenen projeleri görüyorum ama paket adları net.sourceforge.xxx veya com'un tam tersi olduğunu gösteriyor. googlecode.xxx
nafg

@nafg - doğru. Bu nedenle, bu günlerde çalışmaya başladığım herhangi bir açık kaynak projesi için kendi alan adımı kaydetme eğilimindeyim, çünkü kimliğini belirli bir şirkete bağlamak istemiyorum (ister kaynak sağlayan, ister kaynak sağlayan bir github gibi) hizmet ya da geliştirmek için özgün motivasyon sağlayan kendi şirketim gibi). Kendi şeyi olmak için özgür olmak gerekiyor.
Jules,

Yanıtlar:


23

Etki alanı adı sözleşmesine sahip olmayan Microsoft'un ad alanları (.NET paketleri) için vereceği tavsiyeyi teklif edeceğim . Bir alan adının sağlam ve kararlı bir kimliği temsil ettiğine inanmadığım için Java paketleri için de iyi bir tavsiye olduğunu düşünüyorum.

Bir ad alanı adı için genel biçim aşağıdaki gibidir:

<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]

Örneğin, Microsoft.WindowsMobile.DirectX.

Farklı şirketlerin ad alanlarının aynı ada ve ön eke sahip olmalarını önlemek için ad alanı adlarını şirket adıyla önekleyin.

Ad alanı adının ikinci düzeyinde kararlı, sürümden bağımsız bir ürün adı kullanın.

Kurumsal hiyerarşileri ad alanı hiyerarşilerindeki adların temeli olarak kullanmayın, çünkü şirketler içindeki grup adları kısa süreli olma eğilimindedir.

Ad alanı adı uzun ömürlü ve değişmeyen bir tanımlayıcıdır. Kuruluşlar geliştikçe, değişiklikler ad alanı adını eski yapmamalıdır.

Şirketinizin adı bile kararsızsa, sadece ürün adı ile başlamak isteyebilirsiniz.


3
Başka bir şirketin sizinkiyle aynı adı taşıyorsa Microsoft size ne önerir?

25
@ Thorbjørn - dava
RevBingo

9
@ Thorbjørn: Bir alan adının aksine ad alanı kimseye ait değildir ve sahip olamaz. Bu yalnızca kodun mantıksal bir bölümü veya kategorisidir. Siz ve diğer şirket arasındaki çarpışma şansı, başka bir şirketin aynı teknolojide yazılım geliştirmesi ve benzer bir teklifi (kısaca - bir rakibiniz) olmadığı sürece sıfıra yaklaşması. Bu durumda, şirketinizle aynı adı taşıyan rakip bir şirkete sahip olmadığınızdan emin değilseniz, RebBingo'nun önerisini kabul ediyorum.
Allon Guralnek

4
@ Thorbjørn'un cevabında da belirtildiği gibi, Java adlandırma sözleşmesinin çözdüğü sorun, tutarlılığı garanti etmek değil, aynı zamanda benzersizliği de garanti etmektir . Microsoft sözleşmesinin hiçbirini garanti etmediğini unutmayın .
user359996

4
@ user359996: Dediğim gibi, evrensel benzersizliğin neden çözülmesi gereken bir sorun olduğunu anlamıyorum. Karşılıklı özel kod tabanlarında benzersiz olmak için neden adlara ihtiyacınız olsun? Java'nın stili de bunu garanti etmiyor , çünkü alan adları sahipliği el değiştirebilir. JUtils.com'a sahip olan bir geliştirici, birçok kişinin kullandığı bir com.jutils. * Kütüphanesi geliştirebilir ve daha sonra etki alanını farklı bir com.jutils geliştiren tamamen farklı bir geliştiriciye satabilir. varolan kütüphane
Allon Guralnek 21:12

15

Farklı bir problemin çözümüne bakıyorsunuz, yani programcı X ile programcı Y'nın aynı pakete dosya koyarak ayak parmaklarına adım atmasını nasıl önleriz?

"Etki alanı adınızı yalnızca ters çevirin" bunu zarif bir şekilde çözer, çünkü X ve Y'nin ilgisiz olması durumunda aynı paket ad alanını seçmeyeceklerinden oldukça eminiz.


+1 "Farklı bir problemin çözümüne bakıyorsunuz."
user359996

10

Kongre hatalı değil. İnsanlar kendini güzelce gösterdiğin gibi kusurlu.

2 fayda düşünebilirim:

  1. Bağımsız geliştiriciler arasındaki çarpışmayı önler. Bir etki alanı benzersizdir. İki kişi iki farklı projeyi aynı adlandırabilir, ancak bir etki alanının tam olarak bir sahibi vardır.
  2. Bakıcıyı bulmayı kolaylaştırır. Bazı açık kaynaklı kitaplıkları kullanan bir kod tabanını devralırsanız, onu bulmanıza yardımcı olacak bir pakette olması daha iyi olur. Şimdiye kadar gerçekten önemli değil, çünkü kesinlikle kesinlikle google mümkün olacak. Ancak 10 yıl önce, bu çok belirgin değildi.

7

Ters etki alanı adı, farklı kuruluşların kitaplıklarında aynı sınıf adlarını kullanması durumunda ad çakışmalarını önlemek için kullanılmıştır. Basit bir çözümdür ve mahkeme dışında bazı dezavantajlara sahiptir (örneğin, aynı organizasyondaki sınıflar için isim çarpışmalarından ne haber)?

Kullanmak zorunda değilsiniz, bu bir kural değil, kuraldır. Örneğin, bazı Java programcıları Java Kod Sözleşmelerine saygı duymazlar .

Ancak alternatifleri düşünün. Örneğin, bir LogFactory için tam olarak nitelenmiş iki sınıf adı gibi:

a50e8400_e29b_41d4_a716_446655440000.LogFactory
f47ac10b_58cc_4372_a567_0e02b2c3d479.Logfactory

veya

org.apache.commons.logging.LogFactory
com.evilcorp.logging.LogFactory

Bu yüzden, düşüncelerime göre, sağduyunuzu ve kütüphanenizin kullanıcılarına yönelik bir düşünceyi içerdiği sürece dilediğinizi kullanın.


4

Yeni bir projeye başladığım zaman, pazarlama kaynaklarının sadece kaynak kodunda belirtildiği gibi, bilebilecekleri veya bilemeyebilecekleri içsel ve değiştirilemez bir isim konusunda her zaman ısrar ediyorum. Bu şekilde, proje adı değişiklikleri ve ad alanı kirliliği hakkında endişelenmeme gerek yok.

Bu senaryo bana uyar, çünkü kaynak kodu genellikle ürünün önemli bir parçası değildir, yani projeler genellikle kapalı kaynak kodlu bir sistemdir. Ancak, kaynak kodun ürün olduğu açık kaynaklı projelerde bu mümkün olmayabilir.

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.