2013-03-28 18 views
8

Birçok örnek alanı olan (çoğu isteğe bağlı olan) bir (Java) sınıfım var. Tüm alanların (sınıf) değişmez olmasını isterim. Bu yüzden, sınıfın örneklerini oluşturmak için Oluşturucu Kalıbı'nı kullanmak istiyorum.myBatis'i, Oluşturucu Kalıbı'nı kullanarak bir sınıf örneği oluşturmak için yapılandırabilir miyim?

myBatis'i, Oluşturucu Kalıbı'nı kullanarak bir sınıf örneği oluşturmak için yapılandırabilir miyim? Babamın bir harita döndürmesini ve bu haritayı kodumda örnek oluşturmak için kullanabileceğimi biliyorum. Bununla birlikte, Java Beans ve constructor'lar kullanılarak örnek oluşturabilmeye benzer bir şekilde, bu eşlemeyi yapılandırmanın bir yolunu arıyorum (veya bazı kuralı kullanın).

<!-- this doesn't work but I think h3adache suggest that I could have the resultType 
be com.example.model.CarFacts.Builder and use the Builder constructor. But I'm not sure how 
I would call the methods (such previousOwner(String)) to populate optional params --> 

<mapper namespace="com.example.persistence.CarFactsMapper"> 
    <select id="selectCarFacts" resultType="com.example.model.CarFacts"> 
    select * 
    from CarFacts 
    </select> 

</mapper> 

Son olarak, mapper arayüzü vardır: gibi bir mapper var, Sonra

package com.example.model; 

// domain model class with builder 
public final class CarFacts { 

private final double price; 
private final double numDoors; 
private final String make; 
private final String model; 
private final String previousOwner; 
private final String description; 

public static class Builder { 
// required params 
private final double price; 
private final String make; 
private final String model; 

// optional params 
private final String previousOwner; 
private final String description; 
private final double numDoors; 

public Builder(double price, String make, String model) { 
this.price = price; 
this.make = make; 
this.model = model; 
} 

public Builder previousOwner(String previousOwner) { 
this.previousOwner = previousOwner; 
return this; 
} 
// other methods for optional param 

public CarFacts build() { 
return new CarFacts(this); 
} 
} 

private CarFacts(Builder builder) { 
this.price = builder.price; 
//etc. 
} 
} 

:

Düzenleme İşte

bir örnek (örnek içerecek şekilde) :

package com.example.persistence.CarFactsMapper; 

public interface CarFactsMapper{ 

List<CarFacts> selectCarFacts(); 

} 

Ayrıca, myBatis aracılığıyla statik bir fabrika yöntemi kullanarak örnekler oluşturabiliyordum. Örneğin:

Özellikle
public final class Person { 

private final String lastName; 
private final String firstName; 

private Person(String lastName, String firstName) { 
this.lastName = lastName; 
this.firstName = firstName; 
} 

public Person newInstance(String lastName, String firstName) { 
return new Person(lastName, firstName); 
} 
} 

, ben myBatis newInstance (String, String) aramasını nasıl?

cevap

-1

Bir üretici veya statik fabrika yöntemi kullanmanız gerekmez. Eğer mutasyonlar meydana gelebileceğinden, bu modeller kesinlikle değişmezliği sürdürmeye çalışıyorsanız, yardım, 'örnekler arasında' diyelim. Oluşturucu, çağrısının() çağrılmasından önce mutasyona uğratıldığından (yeni bir değişmez örnek oluşturmak için).

Ölçülmezlik, belirli bir örneğin nasıl oluşturulduğundan bağımsızdır. Değişken olan bir sınıf için inşaatçılar ve statik fabrika yöntemleri yazmak için bizi hiçbir yere götürmez. İnşa noktasında, tüm nesneler henüz mutasyona uğramamıştır ve bu yüzden gerçekten önemli olan şey şu olabilir (inşaatçılar ve fabrikalar ayrıldıktan sonra).

Yapmanız gereken tek şey, sınıfa odaklanmaktır ve bu dersin tamamının bu ölçütsüz olduğunu düşünmektir. Düzenli myBatis haritalaması iyi olmalı - kendinize bir kurucu yazmanın zamanından tasarruf edin.

Yani, sınıfınız değişmez, evet, tüm alanlarınız son ve ilkel türler ya da String (Java'da değişmez!) Olduğundan beri. İlkel olmayan başka alanlarınız varsa, bunların final olmasını istersiniz (teknik olarak final yazmanıza gerek yoktur, ancak alanın gerçekte yeniden atandığı sürece tavsiye edilir) ve sınıflarını da Bu kuralların bir tekrarını sonuna kadar takip edin.

Umarım bu yardımcı olur, karşılaşmak istediğim nokta, yapımcı model ve fabrika yöntemlerinin inşaatı yönetmek için iyi olması, ancak sizin için değişmezlik sağlaması ve her zaman bir kurucu yazmanız gerekir.

+0

Bu soruya cevap vermiyor. –

İlgili konular