Elimden geleni açıklamaya çalışacağım.Statik bir bağlamda belirli nesnelere genel sınıf nasıl kullanılır?
Play Framework 2'yi kullanıyorum ve çok fazla CRUD işlemi yapacağım. Bazıları identitcal olacak, bu yüzden KISS ve DRY istiyorum, bu yüzden genel bir nesne olan list
, details
, create
, update
ve delete
yöntemlerini içeren soyut bir sınıf hakkında düşünüyordum ve bu sınıfı Ben statik bir şekilde olmasaydı
public class Cities extends CrudController {
protected static Model.Finder<Long, City> finder = City.find;
protected static Form<City> form = form(City.class);
// I can override a method in order to change it's behavior :
public static Result list() {
// some different code here, like adding some where condition
}
}
Bu çalışacak:
public abstract class CrudController extends Controller {
protected static Model.Finder<Long, Model> finder = null;
protected static Form<Model> form = null;
public static Result list() {
// some code here
}
public static Result details(Long id) {
// some code here
}
public static Result create() {
// some code here
}
public static Result update(Long id) {
// some code here
}
public static Result delete(Long id) {
// some code here
}
}
Ve CRUD kullanacağı bir sınıfı: nesne (Model & Formu) kullanmak için.
Fakat durum böyleyken nasıl yapabilirim?
Neden basitçe örnek yöntemlerine geçmiyorsunuz? Kalıtım Java'daki sınıf yöntemleri üzerinde çalışmaz. – Vlad
Başka bir fikir de mirasın kompozisyonla değiştirilmesi olabilir: sadece CrudController örneklerine sahip olmak ve işlemleri özel olarak içerilen nesneye devretmek olabilir. (Bu, elbette tasarımınıza bağlıdır.) – Vlad
@Vlad: İlk soru için, yapamıyorum, Denetleyici için statik yöntem gerektirir. Şimdi ikincisi için anlayamıyorum, detaylandırır mısınız (veya yeni bir cevap oluşturabilir)? –