2013-06-13 5 views
6

dozer kullanan bir projeyi orika'a aktarmaya çalışıyorum.Orika bir içeriğe bağlı olarak bir sınıfı diğerine eşlemek için nasıl yapılandırılır?

<?xml version="1.0" encoding="UTF-8"?> 
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozer.sourceforge.net 
http://dozer.sourceforge.net/schema/beanmapping.xsd"> 
    <mapping map-id="all"> 
     <class-a>com.bnppa.cdj.dto.Source</class-a> 
     <class-b>com.bnppa.cdj.dto.Destination</class-b> 
     <field> 
      <a>id</a> 
      <b>id</b> 
     </field> 
     <field> 
      <a>someField</a> 
      <b>someField</b> 
     </field> 
    </mapping> 

    <mapping map-id="small"> 
     <class-a>com.bnppa.cdj.dto.Source</class-a> 
     <class-b>com.bnppa.cdj.dto.Destination</class-b> 
     <field> 
      <a>id</a> 
      <b>id</b> 
     </field> 
    </mapping> 
</mappings> 

Ve sonra nesneyi dönüştürürken mapId kullanın:: Nasıl yapılandırılacağı :

Source s = ... 

List<String> mappingFiles = new ArrayList<String>(); 
mappingFiles.add("dozer/dozerMapping.xml"); 
mapper = new DozerBeanMapper(mappingFiles); 

Destination d = mapper.map(mySource, Destination.class, "small"); 

Yani benim sorudur dozer olarak

, öyle bir şey var yaygın bir uygulamadır Orika böyle bir haritaya sahip mi?

benim haritacıları tanımladığınızda bir harita-id ilan etmek nasıl bulamıyor:

MapperFactory factory = new DefaultMapperFactory.Builder().build(); 

//Register a mapper 
factory.registerClassMap(factory.classMap(Source.class, Destination.class) 
     .field("id","id") 
     .field("someField", "someField") 
     .toClassMap()); 

cevap

1

hızlı cevap: Bu özellik için yerleşik destek var.

Fakat iyi bir nedenden ötürü, temelde farklı bir bağlam olması nedeniyle farklı sınıflar yaratma ihtiyacı (iyi tanımlanmış sorumluluk) anlamına gelir. İkinci nokta, nesnelerin derin bir grafiğidir. Orika, aynı sınıf harita tanımlarını yeniden kullanır. Dolayısıyla bağlam, sınıf haritası vakalarına değil, daha büyük bir grafik haritaya bağlı olabilir.

aynı sınıfın basit bir "yeniden kullanım" ya da bazı iyi tanımlanmış senaryolar ötesinde ciddi kullanım senaryosunu olunca, senaryo başına özel bir MapperFactory kullanılacağını önerir. Örneğin

açığa hizmetleri REST API aracılığıyla yöntemleri (liste)/GET (detaylar) GET/POST/PUT, her biri, özel bir Mapper sahip olabilir.

IMHO, Varlık ve DTO durumunda ... DTO, sözleşmeli bir isim vermenin bir yoludur. Aynı sınıfın bağlamsallaştırılmış kullanımı, kod etrafında birçok gizli bilgiye yol açan bir şeydir. Her kullanım durumu için belirli bir sınıfa sahip olmak, iyi tasarıma yönelik (küçük ama önemli) bir adımdır.

1

Orika'da birden fazla MapperFacades oluşturmak ve her durumda uygun MapperFacade kullanmak isteyebilirsiniz.

özel haritacıları kullanmak başka bir yaklaşım, bu durumda, haritalama bağlamında bir şeyler geçmesi bu bağlam parametreyi kontrol etmek ve o bayrak göre özel eşlemlerinde haritlama mümkün olacaktır.

İlgili konular