[JAVA] Einführung von Dozer to Play Framework

Früher habe ich eine Bibliothek namens Dozer für die Entwicklung mit Spring Framework verwendet. Da es sich jedoch um eine praktische Bibliothek handelt, habe ich mich für die Verwendung mit dem derzeit verwendeten Play Framework entschieden und den Code geschrieben. Die erstellte Quelle wird auf GitHub hochgeladen.

Umgebung

Was ist Dozer?

Eine Bibliothek, die Daten zwischen Objekten abbildet. Dies ist sehr nützlich, wenn Daten mit dem MVC-Framework zwischen Ebenen übertragen werden. Schauen wir uns zunächst eine normale Implementierung an, die Dozer nicht verwendet. Wenn Sie Daten von der aktuellen Ebene zur nächsten Ebene übergeben, schreiben Sie häufig Code wie den folgenden.

Normale Zuordnung


//Aktuelle Schicht

//Übergeben Sie Daten an die nächste Layer-Bean
BeanB beanB = new BeanB();
beanB.field1 = beanA.field1;
beanB.field2 = beanA.field2;
beanB.field3 = beanA.field3;
             .
             .
             .
//Verarbeitung der nächsten Schicht
service.run(beanB);

Das Obige ist ein einfaches Muster, aber wenn die Bean einen Setter oder Getter implementiert oder wenn der Typ konvertiert wird, weil sich der Typ zwischen den Beans unterscheidet, ist die Lesbarkeit schlecht und je mehr Parameter vorhanden sind, desto redundanter ist der Code Es wird sein. Wenn die Bean die Parameter erhöht oder verringert, muss die Zuordnung jedes Mal geändert werden. Das folgende Beispiel zeigt Dozer.

Dozer-Mapping


//Aktuelle Schicht

//Bean Mapping von Dozer
Mapper mapper = new DozerBeanMapper();
BeanB beanB = mapper.map(beanA, BeanB.class);

//Verarbeitung der nächsten Schicht
service.run(beanB);

Wenn Sie das Kopierquellobjekt im ersten Argument der Map-Methode und die Kopierzielklasse im zweiten Argument übergeben, wird das Kopierzielklassenobjekt zurückgegeben, das die Kopierquelldaten enthält. Dies liegt daran, dass Dozer die Daten der Kopierquelle dem gleichnamigen Parameter des Kopierziels zuordnet. Wenn der Typ die Typkonvertierung unterstützt, wird die Typkonvertierung automatisch durchgeführt. Weitere Informationen zur Unterstützung der Typkonvertierung finden Sie unter hier.

Vorbereitung zur Einführung von Play

Versuchen wir es mit Dozer. Ich habe eine App erstellt, die nur den Namen und die Menge vom Bildschirm eingibt und registriert, daher möchte ich Dozer dort vorstellen. Die Installation ist nicht besonders schwierig, da sie einfach durch Hinzufügen zu build.sbt verwendet werden kann.

Fügen Sie zunächst build.sbt Folgendes hinzu und laden Sie es neu und aktualisieren Sie es.

libraryDependencies += "net.sf.dozer" % "dozer" % "5.5.1"

Danach können Sie DozerBeanMapper in der Ebene generieren, die Dozer verwendet, und es verwenden, aber dieses Mal möchte ich es in DI definieren. Erstellen Sie eine MappingModule-Klasse, die AbstractModule erbt, und definieren Sie die Abhängigkeiten.

MappingModule



//Import weggelassen

public class MappingModule extends AbstractModule {

	@Override
	protected void configure() {
		bind(Mapper.class).to(DozerBeanMapper.class);
	}

}

Registrieren Sie das erstellte MappingModule in der application.conf.

application.conf


play.modules {
    enabled += modules.MappingModule
}

Injizieren

Die in jeder Schicht verwendeten Bohnen sind wie folgt definiert.

Bohne Schicht
Form Client - Controller
Dto Controller - Service
Model Service - Repository

Injizieren Sie Mapper in die Klasse, die Sie Dozer verwenden möchten. Da das Folgende die Controller-Klasse ist, ordnen wir Daten von Form zu Dto zu.

IndexController


package controllers;

//Import weggelassen

public class IndexController extends Controller {
	@Inject
	private FormFactory formFactory;
	@Inject
	private Mapper mapper; //Dies
	@Inject
	private IndexService service; 
	
	//Andere Methoden wurden weggelassen

	public Result post() {
		Form<IndexForm> f = formFactory.form(IndexForm.class).bindFromRequest();
		IndexDto dto = mapper.map(f.get(), IndexDto.class); //Mapping hier
		switch(f.get().action){
		case "regist":
			service.regist(dto);
			break;
		case "delete":
			service.delete(dto);
			break;
		default:
		}
		return ok(views.html.index.render(f, dto));
	}

}

Nach dem Erstellen eines RequestBind to Form werden die Daten Dto zugeordnet und die Verarbeitung in die nächste Ebene (Service) verschoben. Form und Dto sind wie folgt definiert.

IndexForm


package forms;

public class IndexForm {
	/**Bildschirmaktion*/
	public String action;
	/**Name*/
	public String name;
	/**Geldbetrag*/
	public String amount;
	/**ID löschen*/
	public String id;
}

IndexDto


package dtos;

//Import weggelassen

public class IndexDto {
	/**Name*/
	public String name;
	/**Geldbetrag*/
	public BigDecimal amount;
	/**ID löschen*/
	public Long id;
	/**Datenliste*/
	public List<Person> personList;
}

Der Typ des Betrags und die Lösch-ID sind unterschiedlich, die Typkonvertierung erfolgt jedoch in Mapper.

Schließlich

Da der Server tatsächlich gestartet und der Vorgang bestätigt wurde, wird die Quelle auf GitHub hochgeladen. Dozer kann angepasst werden, um die Zuordnung zwischen Feldern mit unterschiedlichen Namen und komplexe Zuordnungen zu ermöglichen, aber ich konnte nicht schreiben, da ich nicht wusste, wie ich es in Play einstellen soll. Ich möchte es untersuchen und aktualisieren.

Recommended Posts

Einführung von Dozer to Play Framework
So installieren Sie Play Framework 2.6 für Mac
Verwendung von BootStrap mit Play Framework
Spielen Sie die Framework-Studie
Post to Slack von Play Framework 2.8 (Java)
Spielen Sie Framework2.5 (Java) -Tipps
Spielen Sie den Framework-Lerntest
spielen Framework persönliche Notizen
So verwenden Sie Play Framework ohne typsicheren Aktivator
Play Framework Study Memo Database ①
Java zum Spielen mit Function
Persönliche Notizen des First Play Framework
Validierungsfunktion in Play Framework
Einführung des gRPC-Clients in Schienen
Play Framework Study Memo Database ②Lesen
Erstellung der Play Framework 2.6 (Java) -Entwicklungsumgebung
Spielen Sie das Framework Study Momo DB Update
Doppelte Übermittlung von Maßnahmen mit Play Framework
Spielen Sie geplante Framework-Jobs und Crontab