Bu şekilde çalışıyorum (Struts2 + Hibernate):
Struts İşlemlerim, yalnızca web tarayıcısındaki bilgilerin gösterilmesinden sorumludur. Düşünmemek
Kullanıcı -> İşlem -> Servis -> Depo -> Veri Erişimi
Veya:
Görmek İstiyorum -> Nasıl Görülür -> Ne Yapmalı -> Nasıl Gidilir -> Nereden Alınır?
Öyleyse, ilk katmanda (manzara) şöyle bir şey var:
public String execute () {
try {
CourseService cs = new CourseService();
Course course = cs.getCourse(idCourse);
} catch (NotFoundException e) {
setMessageText("Course not found.");
} catch (Exception e) {
}
return "ok";
}
Gördüğün gibi benim "bakış açım" sanmıyorum. Bir hizmet istiyor (kursları yönetmek için) belirli bir kurs istiyor. Bu hizmet, raporlar, seraches vb. Gibi daha birçok şeyi yapabilir. Sonuçlar her zaman bir liste veya belirli bir nesnedir (örnek gibi). Hizmetler gerçek makinedir, kurallar uygular ve Depoya erişir (verileri yönetmek için).
Dolayısıyla, Servislerimi, Depolarımı ve DAOS'umu farklı kütüphanelere koyarsam, onu metin tabanlı bir programda veya Pencere tabanlı bir masaüstü sisteminde bile hiçbir şeyi değiştirmeden kullanabilirim.
Servis ne yapılacağını bilir, ancak nasıl gösterileceğini bilmez. Görünüm nasıl gösterileceğini bilir, ancak ne yapacağını bilemez. Servis / Havuz ile aynı: Servis veriyi gönderiyor ve talep ediyor, ancak verilerin nerede olduğunu ve nasıl alınacağını bilmiyor. Depo, Hizmetin çalışabileceği nesneleri oluşturmak için ham verileri "oluşturur".
Ancak Havuz veri tabanı hakkında hiçbir şey bilmiyor. Veri tabanı türü (MySQL, PostgreSQL, ...) DAO ile ilgilidir.
Veritabanını değiştirmek istiyorsanız DAO'yu değiştirebilirsiniz ve üst katmanları etkilememelidir. Veri yönetiminizi güncellemek istiyorsanız Depoyu değiştirebilirsiniz, ancak bu DAO ve üst katmanları etkilememelidir. Mantığınızı değiştirmek istiyorsanız, Servisleri değiştirebilirsiniz, ancak bunun üstündeki veya altındaki katmanlarla karışmaması gerekir.
Ve görünümdeki herhangi bir şeyi, hatta teknolojiyi (web, masaüstü, metin) bile değiştirebilirsiniz, ancak bu, aşağıdaki hiçbir şeyle temas halinde olmamalıdır.
İş mantığı Servis. Ancak bununla nasıl etkileşime girileceğini görmektir. Şimdi gösterilecek düğme nedir? Kullanıcı bu bağlantıyı görebilir mi? Sisteminizin konsol tabanlı bir program olduğunu mu düşünüyorsunuz: yanlış kullanıcının #> myprogram -CourseService -option=getCourse -idCourse=234
bu komutu yazmak için tuşlara basması için onu seçtiğini veya durdurduğunu inkar etmelisiniz ?
Web tabanlı sistemlerde (Struts + JavaEE) konuşma Ayrı bir GUI denetleyici paketim var. Eylem görünümünde Kaydedilen kullanıcıya veriyorum ve sınıf bana düğmeleri (veya istediğim herhangi bir arayüz elemanını) veriyor.
<div id="userDetailSubBox">
<c:forEach var="actionButton" items="${actionButtons}" varStatus="id">
${actionButton.buttonCode}
</c:forEach>
</div>
Ve
private List<ActionButton> actionButtons;
Bunu hizmetlerden uzak tutmayı unutma. Bu VIEW olayı. Struts Eylemlerinde saklayın. Herhangi bir arayüz etkileşimi, gerçek işletme kodundan tamamen ayrı olmalıdır, bu nedenle sisteminizi taşırsanız, artık ihtiyacınız olmayacak olanı kesmeniz kolaylaşacaktır.