2010-07-29 38 views
9

Bạn có biết thư viện khách truy cập đồ thị đối tượng java tốt không?Thư viện khách truy cập đồ thị đối tượng Java

Tôi muốn truy cập một đối tượng và các thành phần phụ của nó và thực hiện một số hành động khi một số điều kiện được khớp.

Ví dụ sử dụng:

  • trên một đồ thị đối tượng miền khổng lồ, thiết lập lại mỗi id để null
  • trên một đồ thị đối tượng miền khổng lồ, thay thế mỗi Set với một trường hợp TreeSet chứa cùng các yếu tố.

Tôi muốn một thư viện, không phải mã tùy chỉnh vì duyệt qua biểu đồ đối tượng có thể khó khăn. Bạn phải xử lý các bộ sưu tập, mảng, proxy, vv ... Tôi đã nghĩ về việc sử dụng lại một phần của XStream để đạt được điều này, nhưng nó không dễ dàng như vậy: Khách truy cập Xstream hướng nhiều hơn vào việc chuyển đổi đối tượng hơn là tự sửa đổi đối tượng .

+0

+1, câu hỏi thú vị! –

Trả lời

1

Tại sao bạn cần thư viện để thực hiện điều đó?

Vì bạn chỉ định đây là biểu đồ đối tượng miền thì tại sao không xác định và triển khai giao diện có liên quan để cho phép các đối tượng miền của bạn được truy cập bởi các triển khai khách truy cập khác nhau? Một trong những triển khai có thể (như bạn chỉ định) đặt lại từng ID thành null.

Ví dụ

Đầu tiên xác định các giao diện được thực hiện bởi các đối tượng có thể được truy cập hoặc đóng vai trò như du khách.

public interface Visitable { 
    void visit(Visitor visitor); 
} 

public interface Visitor { 
    void visitDomainObjectA(DomainObjectA obj); 
    void visitDomainObjectB(DomainObjectB obj); 
} 

Bây giờ xác định hai lớp đối tượng tên miền, cả hai đều có thể được truy cập.

public abstract class DomainObject implements Visitable { 
    private Object id; 

    public Object getId() { return this.id; } 
    public void setId(Object id) { this.id = id; } 
} 

public class DomainObjectA extends DomainObject { 
    public void visit(Visitor visitor) { 
    visitor.visitDomainObjectA(this); 
    } 
} 

public class DomainObjectB extends DomainObject { 
    public void visit(Visitor visitor) { 
    visitor.visitDomainObjectB(this); 
    } 
} 

Bây giờ xác định một thực khách bê tông mà không một cái gì đó hữu ích:

public class MyVisitor implements Visitor { 
    public void visitDomainObjectA(DomainObjectA doa) { 
    doa.setId(null); 
    } 

    public void visitDomainObjectB(DomainObjectB dob) { 
    doa.setId(UUID.randomUUID()); 
    } 
} 
+0

Tôi đã tinh chỉnh câu hỏi của mình về câu trả lời có liên quan của bạn. Tên miền của tôi là rất lớn và đồ thị của tôi là phức tạp. Vì vậy, tôi cần một cái gì đó mạnh mẽ và đã được gỡ lỗi và sẵn sàng để sử dụng. – Guillaume

+0

IMO bạn đã làm cho vấn đề trở nên khó khăn bằng cách cố gắng trở nên phổ biến hơn. Điểm trong thư viện có thể đi qua bất kỳ đồ thị đối tượng * nào (có lẽ là do sự phản chiếu) và sau đó gọi * bất kỳ phương thức nào * trên các đối tượng đã cho? Bạn thực sự vứt bỏ bất kỳ sự an toàn kiểu thời gian biên dịch nào. Sau khi tất cả nó có thể được lập luận rằng bất kỳ ứng dụng OO chỉ đơn giản là đi qua một đồ thị đối tượng và gọi phương pháp trên một tập hợp con của các đối tượng. – Adamski

+0

Tôi không muốn trở thành uber-generic. Miền của tôi phức tạp hơn;) Và theo cách này, đó là cách các công cụ tuần tự hóa như XStream đang hoạt động. Và họ làm việc tốt. – Guillaume

1

Làm thế nào về marshalling đồ thị đối tượng của bạn sang XML và sử dụng một số thư viện xử lý XML/thao tác tiêu chuẩn?

+0

Đó là một gợi ý tốt, nhưng tôi muốn tránh nó nếu có thể. Nó thêm một số bước mà tôi muốn tôi có thể tránh được – Guillaume

+0

Các bước đó sẽ là gì? – Jatin

+0

phần 'đối tượng tự sửa đổi' có thể sẽ cần nhiều mã tùy chỉnh ... – Guillaume

1

Có thể bạn nên thử một cơ sở dữ liệu đồ thị như Neo4j hoặc TitanDB. Nó sẽ cho phép bạn ảnh hưởng đến lượt truy cập bằng cách sử dụng truy vấn để cắt chéo tập dữ liệu của bạn và khám phá các mối quan hệ.

Cả hai đều có API Java mở rộng để tạo điều kiện tải và truy vấn dữ liệu.

2

Khi điều đó xảy ra, tôi đã làm một điều như vậy. Không thực sự là một thư viện, nhưng nó có thể phát triển thành một cách dễ dàng.

Nhưng tôi tình cờ gặp điều này vì tôi đang tìm kiếm thứ gì đó tốt hơn. Tôi không thể cho nó ra, và nó chắc chắn chưa ở trong trạng thái mà tôi sẽ làm điều này, nhưng có lẽ một thứ như vậy sẽ đến để sống như hệ điều hành?

Điều tôi đã cho phép tôi duyệt qua và sửa đổi biểu đồ đối tượng an toàn loại, ví dụ từng trường hợp, tùy chọn sao chép nó sao cho bản gốc vẫn không bị ảnh hưởng. Java BTW.Điều gì cũng làm việc một chút là nắm bắt các mối quan hệ trong đồ thị (các cạnh, nếu bạn muốn).

Điều tôi có thể hình dung là định nghĩa rõ ràng về các phép toán (chẳng hạn như sửa đổi, mở rộng, trùng lặp, thu gọn, di chuyển) và triển khai tương ứng. Các khía cạnh trực giao như biểu đồ con xác định sẽ được tính toán một cách chính xác.

Bất kỳ ai quan tâm đến dự án như vậy, vui lòng trả lời, có thể chúng tôi có thể bắt đầu.

Các vấn đề liên quan