Tôi sẽ cố gắng giải thích tốt nhất của mình.Làm thế nào để sử dụng lớp chung với các đối tượng cụ thể trong một bối cảnh tĩnh?
Tôi sử dụng Play Framework 2 và tôi sẽ thực hiện rất nhiều hành động CRUD. Một số người trong số họ sẽ được nhận dạng, vì vậy tôi muốn KISS và DRY vì vậy lúc đầu tôi đã suy nghĩ về một lớp trừu tượng có chứa các phương pháp list
, details
, create
, update
và delete
, với đối tượng chung và mở rộng lớp này bằng cách xác định đối tượng sử dụng (Model & Form):
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
}
}
Và một lớp học mà sẽ sử dụng 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
}
}
này sẽ làm việc nếu tôi không phải là trong một bối cảnh tĩnh.
Nhưng vì vậy, tôi có thể làm gì?
Tại sao không chỉ đơn giản là chuyển sang phương pháp ví dụ? Thừa kế không hoạt động trên các phương thức lớp trong Java. – Vlad
Một ý tưởng khác có thể là thay thế thừa kế bằng bố cục: chỉ có các cá thể của CrudController và ủy nhiệm các hoạt động cho đối tượng chứa đối tượng cụ thể. (Tất cả điều này phụ thuộc vào thiết kế của bạn, tất nhiên.) – Vlad
@Vlad: Đối với câu hỏi đầu tiên, tôi không thể, Play yêu cầu phương pháp tĩnh cho bộ điều khiển. Bây giờ cho lần thứ hai, tôi không chắc chắn để hiểu, bạn có thể xây dựng (hoặc tạo ra một câu trả lời mới)? –