SORU
10 ŞUBAT 2009, Salı


Ne stratejisi Java projelerinde adlandırma paket için ve neden kullanıyorsunuz?

Bu konuda bir süre önce düşünmüştüm ve son zamanlarda dükkanıma web app ilk gerçek Java yaptığı gibi ortaya çıktı.

Bir giriş olarak, iki ana paket adlandırma stratejileri görüyorum. Açık olmak, bütün 'etki alanı.adlandırmıyorum şirket.proje' de bu işin bir parçası altında. paket sözleşmesi bahsediyorum) Her neyse, paketi aşağıdaki gibidir: görüyorum adlandırma

  1. İşlev: işlev mimari açıdan uygun paketleri Adlandırma yerine iş etki alanına göre kendi kimlik.Bunun için başka bir terim göre adlandırma olabilir''. katman Yani, bir *olurdu.uı ve bir oyun paketi.etki alanı ve bir oyun paketi.orm paketi. Paketlerinizi dikey yerine yatay dilimler.

    Buçokmantıksal adlandırma daha yaygın. Aslında, şimdiye kadar gördüğüm ya da bunu yapan bir proje duymadım inanmıyorum. Bu tabii ki beni leery (gibi düşünme ama tam bir çözüm için bir NP problemi) gibi değilim çok akıllı ve sanırım herkes olmalı harika nedenlerle yapıyor bu şekilde yapıyorlar. Öte yandan, insanlar sadece odadaki fil eksik karşı değilimveHiç gerçek bir tartışma duydumiçinyapmaya paketi bu şekilde adlandırma. Sadece fiili bir standart gibi görünüyor.

  2. Mantıklı: iş alanı kimliklerine göre Adlandırma paketlerive bu dikey ile bir ilgisi yoktur her sınıf koyarak bu pakete işlevselliği dilim.

    Daha önce de belirttiğim gibi hiç görmedim ya da duymadım, ama bana mantıklı bir sürü yapar.

    1. Sistemleri yatay yerine dikey yaklaşım eğilimindedir. Gidip Sipariş İşleme sistemi, veri Erişim Katmanı değil geliştirmek istiyorum. Belli ki, bu sistemin gelişmesini veri Erişim Katmanı konuşacağımı iyi bir şans var, ama konu bu şekilde düşünmüyorum. Bu ne demek, tabii ki, o zaman alıyorum bir değişiklik sipariş ya da istiyorum uygulamak için bazı yeni özellik, çok iyi olur değil balığa etrafında bir sürü paketleri bulabilmek için tüm ilgili sınıfları. Bunun yerine, ben ne yapıyorum " X " ile bir ilgisi yoktur, çünkü X paketin içine bakma

    2. Gelişim açısından, paketleri iş alanı belge için önemli bir galibiyet yerine, mimari olarak görüyorum. Etki hemen hemen her zaman daha da zor olacak sistemin parçası olarak sistemin mimarisi, özellikle bu noktada, kendi uygulamasında sıradan hale geliyor neredeyse nerede grok gibi hissediyorum. Adlandırma bu tip bir sistemi gelip anında paketleri adlandırma ben aslında siparişler, müşteriler, işletmeler, ürünler, vb ile ilgilidir. oldukça kullanışlı görünüyor.

    3. Bu Java erişim değiştiricileri çok daha iyi yararlanmak için izin verecek gibi görünüyor. Bu size çok daha temiz bir şekilde sistemi katmanları içine sistemlerine yerine arayüzleri tanımlamak için izin verir. Bu yüzden, varsa bir emir alt sistemi istediğin için şeffaf kalıcı olabilir teoride asla izin başka bir şey anlıyorsun, değil tarafından kalıcı olmaması oluşturmak için ortak arabirimler için sebat sınıflarda dao katmanı ve yerine ambalaj dao sınıfında tek sınıfları ile ilgilenir. Belli ki,eğerişlevselliği, bunun için bir arabirim sağlar veya kamu yapabilirsin bunu duyurmak istedim. Sadece Sistem Özellikleri birden çok paket arasında bölünmüş dikey bir dilim alarak bu çok fazla kilo gibi görünüyor.

    4. Görebildiğim tek dezavantajı katmanları biraz daha zor söküp yapıyor sanırım. Alternatif bir teknoloji ile sadece silme veya bir paket yeniden adlandırma ve sonra da yeni bir tane bırakarak yerine, gidip paketleri tüm sınıfların tüm değiştirmek zorunda. Ancak, bu büyük bir anlaşma görmüyorum. Olabilir bir eksikliği deneyimi, ama ben hayal bu miktarın kez takas teknolojileri sönük kalır, karşılaştırma için miktarı kere gir ve düzenle dikey özelliği dilimleri içinde senin sistem.

O zaman soru şu sen git, nasıl paketlerinizi adı ne olurdu ve neden? Lütfen mutlaka altın yumurtlayan tavuğu ya da burada bir şeyler buldum sanırım anlamıyorsun. Çoğunlukla akademik deneyimi ile bu yeni sayılırım. Ancak, devam edebilirim, böylece tüm umuyorum yani benim akıl delikleri fark edemiyorum.

CEVAP
10 ŞUBAT 2009, Salı


Paket tasarımı için, ilk kat, bazı diğer işlevler tarafından ayıracağız.

Bazı ek kurallar vardır:

  1. katmanlar (alt) en genel en özel (üst) dizilir
  2. her bir katman ortak bir arayüz (soyutlama)
  3. bir katmanı tek bir katman ortak arabirim (saklama) bağlı olabilir
  4. bir katmanı sadece daha genel tabakaları (üstten alta bağımlılıkları) bağlı olabilir
  5. tercihen bir katman katman doğrudan altındaki bağlıdır

Bu yüzden, örneğin bir web uygulaması için, uygulama katmanı (yukarıdan aşağıya) aşağıdaki katmanları olabilir:

  • Sunum Katmanı: müşteri hizmetleriyle gösterilen UI oluşturur
  • uygulama katmanı: uygulama için belirli bir mantık içerir, durum bilgisi olan
  • servis katmanı: gruplar işlevi, etki alanı, vatansız
  • entegrasyon katman: arka uç tier erişim sağlar (db, jms, e-posta, ...)

Sonuç paket düzeni için, bu bazı ek kurallar şunlardır:

  • her Paket ismi kök <prefix.company>.<appname>.<layer>
  • daha fazla işlevsellik ile ayırma katmanı arayüzü: <root>.<logic>
  • özel öneki bir katman özel uygulama: <root>.private

Aşağıda örnek bir düzen.

Sunum katmanı, ve isteğe bağlı olarak (grup) view teknolojisi uygulamaları bölünür.

com.company.appname.presentation.internal
com.company.appname.presentation.springmvc.product
com.company.appname.presentation.servlet
...

Uygulama katmanı durumlarda kullanmak için ayrılmıştır.

com.company.appname.application.lookupproduct
com.company.appname.application.internal.lookupproduct
com.company.appname.application.editclient
com.company.appname.application.internal.editclient
...

Servis katmanı, iş etki, bir arka uç kademe etki alanı mantık etkisinde ayrılmıştır.

com.company.appname.service.clientservice
com.company.appname.service.internal.jmsclientservice
com.company.appname.service.internal.xmlclientservice
com.company.appname.service.productservice
...

Entegrasyon katmanı 'teknolojileri' ve erişim nesneleri. ayrılmıştır

com.company.appname.integration.jmsgateway
com.company.appname.integration.internal.mqjmsgateway
com.company.appname.integration.productdao
com.company.appname.integration.internal.dbproductdao
com.company.appname.integration.internal.mockproductdao
...

Bu gibi paketleri ayıran avantajları karmaşıklığı yönetmek için daha kolay olmasıdır, ve test edilebilirlik ve yeniden kullanılabilirliği artırır. Havai bir sürü gibi görünüyor olsa da, benim deneyim aslında çok doğal geliyor ve herkes bu yapı üzerinde çalışan (veya benzeri) bunu birkaç gün içinde alır.

Neden dikey yaklaşım o kadar iyi değil düşünüyorum?

Katmanlı modelde, üst düzey birkaç farklı modüller alt düzey aynı modülünü kullanabilirsiniz. Aynı uygulama için birden fazla görünüm oluşturabilirsiniz, birden fazla uygulama aynı hizmeti kullanabilirsiniz, birden çok hizmet aynı ağ geçidi kullanabilirsiniz. Örneğin: Burada hile katmanları üzerinden geçerken, işlevsellik düzeyini değiştirir. Daha spesifik kat modülleri işlevselliğini ifade düzeyleri 1-1 göster yok çünkü daha genel katman modülleri 1-1 göster, yok.

Paket tasarımı için dikey yaklaşım kullandığınızda, yani işlevselliği ile önce bölmek, sonra da tüm binada farklı blok zorlarseviyeleriaynı işlevselliği''. işlevselliği ceket Daha özel biri genel modüller tasarım olabilir. Ama bu daha genel bir katman daha spesifik katmanları hakkında bilmeniz gereken önemli prensibini ihlal ediyor. Örneğin servis katmanı uygulama katmanı kavramları modellenmiş olmamalı.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • max2sims2

    max2sims2

    19 Kasım 2008
  • ShotgunSandwichENT

    ShotgunSandw

    3 EKİM 2012
  • SoundHound

    SoundHound

    8 Mart 2006