Tôi đang thiết kế một công cụ trò chơi bằng Java.Java: Thực hiện các đối tượng được liên kết gấp đôi
Tại cốt lõi của động cơ này tồn tại hai lớp Tài sản và Thuộc tính, trong đó Nội dung có danh sách Thuộc tính. Hầu hết các thuộc tính không cần liên kết sao lưu vào Thuộc tính của chúng, nghĩa là Thuộc tính có thể và thường xuất hiện trong danh sách nhiều hơn một Nội dung. Tuy nhiên, có một phần mở rộng thuộc tính được gọi là UniqueAttribute, là một triển khai thực hiện cho những thuộc tính cụ thể cho tài sản của họ và sử dụng một liên kết ngược lại.
Một cách lý tưởng, phương pháp addAttribute Asset tôi sẽ giống như thế này nếu tôi cắt ra các mã khác:
public void addAttribute(Attribute attribute){ if(attribute instanceof UniqueAttribute) ((UniqueAttribute)attribute).setAsset(this); attributeList.add(attribute); }
Thật không may, vì chúng sống trong các gói khác nhau, UniqueAttribute.setAsset() phải được công khai . Điều này rời khỏi phương pháp mở cho người dùng bên ngoài của động cơ để gây rối với, và trong khi tôi chỉ có thể handwave nó đi bằng cách nói cách sử dụng phương pháp này trực tiếp là một lỗi - nó có vẻ khá cẩu thả.
Lựa chọn thứ hai là để cung cấp các UniqueAttribute với tài sản xây dựng, có nghĩa là các mã tại thời điểm tạo ra sẽ giống như thế này:
asset.addAttribute(new UniqueAttribute(asset));
Trong khi tôi có thể thêm một tấm séc-và- có thể ném hoặc khẳng định để xác nhận tài sản chính xác được chuyển vào, tôi về cơ bản dựa vào người dùng để kết nối hai, mà tôi cũng không muốn làm.
Tùy chọn thứ ba là cắn viên đạn và đặt 50 tệp java vào cùng một gói để tôi chỉ có thể sử dụng độ nhớt chuẩn.
Có loại mô hình hoặc thứ gì đó sẽ giúp liên kết hai thứ này lại với nhau mà không lộ dây hoặc buộc tôi đưa mọi thứ vào một gói lớn không?
Không thích hợp: Tôi luôn không thích rằng khái niệm về các gói phụ trong java chưa thực sự được mở rộng theo bất kỳ cách có ý nghĩa nào. Một gói phụ, như xa như java là có liên quan chỉ đơn giản là một gói khác nhau, và đã có nhiều lần tôi có thể làm với các công cụ sửa đổi hiển thị trực tiếp liên quan đến điều này.
có thể tùy chọn 2 với một số loại nhà máy biết về mối quan hệ giữa các thuộc tính và nội dung độc đáo? –
Trong khi tôi cho rằng có các quy tắc đặc biệt cho các gói phụ có thể đã hoạt động, nó hầu như không cần thiết (vì bạn có thể sử dụng các hệ thống như Spring hoặc OSGi để thực thi sự tách biệt giữa giao diện và thực hiện) và sẽ làm mọi thứ phức tạp hơn rất nhiều ít được. Việc triển khai đơn giản, đáng tin cậy quan trọng hơn tính năng phức tạp "dễ thương". –