2010-09-16 26 views
7

Tôi đang phát triển một thư viện mà lập trình viên khác sẽ nhập và sử dụng cho mục đích của họ.Cách sử dụng trình sửa đổi truy cập Java đúng cách trong phát triển thư viện

Tôi nhầm lẫn về mục tiêu của công cụ sửa đổi truy cập Java.

Vấn đề là tôi có các lớp học dưới đây

  • ClassA trong gói org.mylibrary
  • ClassB trong gói org.mylibrary.internal

ClassA cần phải giải quyết ClassB nên ClassB cần phải public class.

Tuy nhiên, từ chế độ xem người dùng thư viện, tôi không có ý định hiển thị ClassB bên ngoài thư viện của mình. Bởi vì nó không nên và không cần phải được khởi xướng bởi người sử dụng.

Tôi nghĩ đến việc di chuyển ClassB sang gói org.mylibrary và biến nó thành lớp riêng tư.

Nếu tôi di chuyển nó đến cùng một gói, sẽ rất lộn xộn và khó tổ chức vì tôi có nhiều lớp trong trường hợp này nên sẽ có nhiều tệp .java trong một gói lớn.

Thông thường tôi đặt các lớp trong các gói được nhóm theo danh mục hoặc lớp và tôi nghĩ rằng việc sắp xếp sẽ dễ dàng.

Làm cách nào để thực hiện việc này? Mọi người xử lý vấn đề này như thế nào?

+0

Hi, câu hỏi hay. Tôi đã tự do chỉnh sửa định dạng và ngữ pháp của bạn một chút :-). – sleske

Trả lời

2

Rất khó để đưa ra lời khuyên cụ thể vì bạn cung cấp rất ít thông tin về vai trò và mối quan hệ giữa ClassAClassB. Tuy nhiên, một giải pháp chung (hầu như luôn được sử dụng như một phần của việc loại bỏ phụ thuộc) là ẩn ClassB phía sau giao diện. Sau đó, ClassA chỉ sử dụng giao diện đó, vì vậy nó không còn phụ thuộc trực tiếp vào ClassB. ClassB có thể được đặt ở chế độ riêng tư, các phiên bản được tạo bởi ví dụ: a factory hoặc dependency injected vào ClassA.

+0

Cảm ơn đề xuất này. Vì vậy, thay vì phơi bày ClassB ra công chúng, một nhà máy của ClassB nên được công khai sau đó? – teerapap

+0

@teerapap, vâng, hoặc chính xác, một nhà máy của 'InterfaceB'. –

1

Giả sử ClassB là gói thử nghiệm có kiểm tra đơn vị:

Tại sao ClassB cần sử dụng nó. Thông thường các lớp kiểm tra sử dụng các lớp thông thường, chứ không phải ngược lại.

Nói chung, đề xuất cho các lớp thử nghiệm là đặt chúng vào gói cùng một gói làm lớp thông thường, nhưng duy trì tệp .java trong hệ thống phân cấp thư mục song song (tức là bạn có src/org/mycompany/MyClass. java và test-src/org/mycompany/MyClassTest.java). Bằng cách đó, với cả Java đều nằm trong cùng một gói và có thể truy cập lẫn nhau và để phát hành, bạn chỉ cần không biên dịch các lớp thử nghiệm (hoặc thậm chí không kiểm tra chúng) - theo cách đó mọi thứ độc đáo riêng biệt.

Nếu điều này không áp dụng trong trường hợp của bạn, có thể bạn có thể chỉnh sửa câu hỏi của mình chi tiết hơn?

+0

Xin lỗi vì đã gây hiểu lầm. Nó không phải là bài kiểm tra đơn vị. Tên gói là ví dụ. Tôi đã thay đổi nó. – teerapap

+0

Xem thêm http://junit.sourceforge.net/doc/faq/faq.htm#organize_1 – trashgod

1

Nó sẽ là một mớ hỗn độn và khó tổ chức bởi vì tôi có nhiều lớp trong kịch bản này.

Bạn có nghĩa là tệp java trông lộn xộn không? Bạn có thể chia các lớp bên trong trong một tệp .java khác.

ClassA.java

package org.application; 

public class ClassA { 
} 

Internal.java

package org.application; 

class ClassB { 
} 

class SomeOtherInternalClass { 
} 

Hope this helps.

+0

Không, tôi không có nghĩa là tập tin trông lộn xộn. Tôi có nghĩa là gói trông lộn xộn vì có nhiều tệp java trong cùng một gói. – teerapap

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