Как использовать общий класс с определенными объектами в статическом контексте?

Я попытаюсь объяснить как смогу.

Я использую Play Framework 2 и буду выполнять много действий CRUD. Некоторые из них будут идентичными, поэтому я хотел бы KISS и DRY, поэтому сначала я думал об абстрактном классе, содержащем list, details, create, updateи deleteс универсальным объектом и расширением этого класса, указав, какой объект использовать (модель и форма):

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
    }
}

И класс, который будет использовать CRUD:

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
    }
}

Это сработало бы, если бы я не был в статическом контексте.

Но если это так, как мне поступить?

10
задан Cyril N. 22 May 2012 в 13:43
поделиться