Bunu bir süre önce düşündüm ve dükkanım ilk gerçek Java web uygulamasını yaparken yakın zamanda yeniden ortaya çıktı.
Giriş olarak, iki ana paket adlandırma stratejisi görüyorum. (Açık olmak gerekirse, bunun tüm 'domain.company.project' kısmına atıfta bulunmuyorum, bunun altındaki paket kuralından bahsediyorum.) Her neyse, gördüğüm paket adlandırma kuralları aşağıdaki gibidir:
İşlevsel: Paketlerinizi iş alanına göre kimliğinden çok işlevlerine göre mimari olarak adlandırmak. Bunun için başka bir terim de 'katman'a göre isimlendirme olabilir. Yani, bir * .ui paketiniz ve bir * .domain paketiniz ve bir * .orm paketiniz olur. Paketleriniz dikey değil yatay dilimlerdir.
Bu, mantıksal isimlendirmeden çok daha yaygındır. Aslında, bunu yapan bir proje gördüğüme veya duyduğuma inanmıyorum. Bu tabii ki beni temkinli kılıyor (bir NP problemine bir çözüm bulduğunuzu düşünmek gibi), çünkü çok zeki değilim ve herkesin bu şekilde yapmak için harika nedenleri olduğunu varsayıyorum. Öte yandan, odadaki fili kaçıran insanlara karşı değilim ve bu şekilde paket adlandırma yapmak için gerçek bir tartışma duymadım . Sadece fiili standart gibi görünüyor.
Mantıksal: Paketlerinizi ticari etki alanı kimliklerine göre adlandırmak ve bu dikey işlevsellik dilimiyle ilgili her sınıfı bu pakete koymak.
Daha önce de bahsettiğim gibi, bunu hiç görmedim veya duymadım, ama bana çok mantıklı geliyor.
Sistemlere yatay yerine dikey olarak yaklaşma eğilimindeyim. Veri erişim katmanını değil, Sipariş İşleme sistemini girmek ve geliştirmek istiyorum. Açıkçası, o sistemin geliştirilmesinde veri erişim katmanına dokunmamın iyi bir şansı var, ama asıl mesele şu ki, ben onu o şekilde düşünmüyorum. Bunun anlamı, elbette, bir değişiklik emri aldığımda veya yeni bir özellik uygulamak istediğimde, ilgili tüm sınıfları bulmak için bir sürü paket içinde balık tutmaya gitmek zorunda kalmamak güzel olurdu. Bunun yerine, X paketine bakıyorum çünkü yaptığım şeyin X ile ilgisi var.
Geliştirme açısından, paketlerinizin mimariniz yerine iş alanınızı belgelemesini büyük bir kazanç olarak görüyorum. Etki alanının, neredeyse her zaman, sistemin mimarisi, özellikle bu noktada, uygulamada neredeyse sıradan hale geldiği için, sistemin daha zor olan parçası olduğunu düşünüyorum. Bu tür bir adlandırma kuralına sahip bir sisteme gelebilmem ve paketlerin isimlendirilmesinden anında bunun siparişlerle, müşterilerle, işletmelerle, ürünlerle vb. İlgilendiğini biliyor olmam oldukça kullanışlı görünüyor.
Görünüşe göre bu, Java'nın erişim değiştiricilerinden çok daha iyi yararlanmanıza izin verecek. Bu, arayüzleri sistemin katmanları yerine alt sistemlere çok daha temiz bir şekilde tanımlamanıza olanak tanır. Dolayısıyla, şeffaf bir şekilde kalıcı olmasını istediğiniz bir sipariş alt sisteminiz varsa, teo katmanında kalıcılık sınıflarına genel arayüzler oluşturmak zorunda kalmayarak ve bunun yerine dao sınıfını paketleyerek, teorik olarak bunun kalıcı olduğunu hiçbir şeyin bilmesine asla izin veremezsiniz. sadece ilgilendiği sınıflarla. Açıkçası, eğer bu işlevselliği ifşa etmek istediği, bunun için bir arayüz sağlamak veya kamu yapabiliriz. Sisteminizin özelliklerinin dikey bir diliminin birden çok pakete bölünmesiyle bunun çoğunu kaybediyorsunuz gibi görünüyor.
Sanırım görebildiğim bir dezavantaj, katmanları biraz daha zorlaştırması. Bir paketi silmek veya yeniden adlandırmak ve ardından alternatif bir teknoloji ile yerine yenisini bırakmak yerine, içeri girip tüm paketlerdeki tüm sınıfları değiştirmeniz gerekir. Ancak, bunun önemli bir şey olduğunu görmüyorum. Tecrübe eksikliğinden kaynaklanıyor olabilir, ancak teknolojilerinizi değiştirdiğiniz zamanların, girdiğiniz ve sisteminizdeki dikey özellik dilimlerini düzenlediğiniz sürelere kıyasla soluklaştığını hayal etmeliyim.
Öyleyse sanırım soru size sorulacak, paketlerinizi nasıl adlandırıyorsunuz ve neden? Lütfen burada altın kaz ya da başka bir şeye rastladığımı düşünmediğimi anlayın. Tüm bunlarda oldukça yeniyim ve çoğunlukla akademik deneyimim var. Ancak, muhakememdeki boşlukları göremiyorum, bu yüzden hepinizin görebileceğini umuyorum, böylece devam edebilirim.