Nesne dönüşümü için tasarım deseni (java)


21

Bir tasarım fabrikası ve MVC dışında tasarım desenlerini çok sık kullanmıyorum ve daha fazla kullanmaya başlamak istiyorum.

Elimde somut bir durum var, bu durumda tasarım modellerinin kullanımı hakkındaki görüşünüzü istiyorum.

Uygulamamda farklı durumlarda nesneleri sık sık dönüştürmem gerekiyor. Bir Hazırda Bekletme POJO'sunu bir DTO'ya dönüştürmem gerekebilir, çünkü GWT kullanıyorum ve Hazırda Bekletme POJO'ları seri hale getirilemiyor ve satır üzerinden gönderilemiyor.

Başka bir durumda Java nesnelerini Solr ile indekslemek için SolrInputDocument dizinine dönüştürmem gerekebilir.

Bunun için bir tasarım deseni kullanmam gerekip gerekmediğini bilmek istiyorum. Görünüşe göre, "nesne dönüştürme" esnek / soyut bir şekilde bir kalıpla ele alınabilecek genel bir görevdir, ancak gerçekten nasıl olduğunu anlamıyorum.

Kalıplar olmadan her dönüşüm türü için ayrı bir sınıf oluşturabilirim, örneğin CourseToSolrInputDocument (Kurs, uygulamamda Hazırda Bekletme öğesidir). Veya CourseToCourseDTO. Bu dönüştürme sınıflarının her biri convert(), kaynak nesneyi girdi olarak alan ve çıktı nesnesini döndüren tek bir statik yönteme sahip olabilir .

Ama bu gerçekten bir model değil, değil mi? Bu yüzden generikleri olan bir şeyle başladım ve Converter arayüzünü uygulayan bu sınıfı yarattım. Ama bir şekilde aptalca bir genel bir arayüz yarattığını hissettiriyor ve kendimi jenerik kullanımı konusunda tebrik edemekten başka bir avantaj görmüyorum.

public class CourseToSolrInputDocument implements Converter<Course, SolrInputDocument>         {
    @Override
    public void convert(Course source, SolrInputDocument destination) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
}

Öyleyse, buradaki asıl soru şudur: genel nesne dönüşümü için geçerli bir model var mı ve yaklaşımınız ne olurdu ve yalnızca bir dönüşüm başına sınıf türü yaklaşımı kullanmanın avantajları nelerdir?


Desenler, ne yapmak istediğinize (ve nasıl düzgün bir şekilde yapılacağına dair), kullanmaya istekli bir şeyden daha çok addır. Öyleyse, nasıl daha fazla kalıp kullanabileceğimden daha iyi bir soru şudur: Zaten hangi patletleri kullandım (belki de tamamlanmamış / kıvrımlı bir şekilde).
user470365

Yanıtlar:


18

Çevirmen Desen soruyormuşsun şeydir.

Ama aradığın şeyin bir kalıptan, bir kalıptan ziyade bir şüpheli olduğunu düşünüyorum. Dozer'in Java dünyasında popüler olduğuna inanıyorum .


Dozer ve Apache Beanutils'i tanıyorum. "Dönüşüm yapım" içerisinde yer alanlardan birini kullanmak istiyorum. Bu arada, Spring'in burada bulunabilecek nesneleri dönüştürmek için bir çözüm sunduğunu öğrendim: static.springsource.org/spring/docs/3.0.0.RC3/reference/html/… . Bunu daha önce görmüştüm, ancak çok uzun zaman önce, bu yüzden kendi arayüzüm, Bahar'dan hatırladığım şeye dayanıyordu. Bahar çözümüyle gideceğim, çünkü bahar zaten benim projemde ve iyi bir yaklaşım gibi görünüyor.
Julius,
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.