Sự khác biệt giữa các lớp Helper và Utility là gì?


115

Làm thế nào để xác định cách gọi một lớp XHelper hoặc XUtils?

Theo suy nghĩ của tôi:

Lớp người trợ giúp , là lớp có thể được khởi tạo và thực hiện một số công việc kinh doanh

Lớp Utils , là một lớp tĩnh thực hiện các hoạt động nhỏ và lặp lại trên một loại cá thể (ví dụ về lớp utils ArrayUtils hoặc IOUtils từ Apache)


5
"Công việc kinh doanh" là điểm khác biệt chính ở đây. Tôi thấy đây là một quy ước hữu ích để sử dụng Utilscho một lớp tĩnh có thể được sử dụng ở bất kỳ đâu trong tổ chức hoặc trong một tổ chức khác. Một Helperlớp có mã chung có thể được sử dụng lại trong một dự án và có các phụ thuộc trong dự án. Tất nhiên, không có quy tắc chung được chấp nhận, nhưng tôi thấy điều này hữu ích.
Stephen Hosking

1
@StephenHosking Lời giải thích của bạn thuyết phục nhất đối với tôi và có thể đối với tất cả mọi người. Nếu có thể, bạn sẽ đăng lời giải thích của mình như là câu trả lời thực sự cho bài đăng này thay vì chỉ để lại bình luận.
Bigair

@Không khí lớn. Cảm ơn bạn, nhưng của tôi chỉ là một gợi ý, không phải là một câu trả lời. Tôi rất vui vì mọi người đã tìm thấy nó hữu ích.
Stephen Hosking

Câu trả lời:


101

Có nhiều kiểu đặt tên để sử dụng. Tôi sẽ đề xuất Utils chỉ vì nó phổ biến hơn.

Một lớp Tiện ích được hiểu là chỉ có các phương thức tĩnh và không có trạng thái. Bạn sẽ không tạo một thể hiện của một lớp như vậy.

Người trợ giúp có thể là một lớp tiện ích hoặc nó có thể là trạng thái hoặc yêu cầu tạo một phiên bản. Tôi sẽ tránh điều này nếu có thể.

Nếu bạn có thể làm cho tên cụ thể hơn. ví dụ: nếu nó có các phương pháp sắp xếp, hãy đặt nó thành XSorter

Đối với mảng, bạn có thể tìm thấy các lớp trợ giúp như

Array
Arrays
ArrayUtil
ArrayUtils
ArrayHelper

BTW một tay ngắn cho một lớp tiện ích là một enum không có phiên bản

enum XUtils {;
    static methods here
}

Nếu bạn cần triển khai một giao diện, tôi sẽ sử dụng Singleton không trạng thái.

enum XHelper implements RequiredInterface {
   INSTANCE;
   // no instance fields.
}

Tôi điều này trong bài đăng này stackoverflow.com/a/2135797/787698 , rằng Xutils là một lớp tĩnh không có phụ thuộc. Bạn đang nghĩ gì về điều đó?
jakcam

@jakcam Điểm thú vị. Một người trợ giúp có thể là trạng thái và yêu cầu một phiên bản. Tôi sẽ sử dụng một lớp tiện ích không trạng thái và ít phiên bản hơn nếu có thể.
Peter Lawrey

Bạn hiểu gì bởi Xutils là một lớp tĩnh không có phụ thuộc ?
jakcam

Tôi không thể tìm thấy "xutils" hoặc "không có phụ thuộc" trong bài đăng đó.
Peter Lawrey

1
@John Trong trường hợp đó, một phương pháp tiện ích không được mong muốn vì nó khó mô phỏng hơn cho mục đích thử nghiệm.
Peter Lawrey,

16

Nói chung? Nó hoàn toàn tùy ý. Không có quy tắc nào cho việc này.


8

Tiện ích là một lớp "nút lá" sử dụng chung. Có nghĩa là, nó không có bất kỳ phụ thuộc nào vào dự án của bạn và có thể được chuyển từ dự án này sang dự án khác mà không bị hỏng hoặc trở nên vô dụng. Ví dụ: Vector3, RandomNumberGenerator, StringMatcher, vv ...

"Người trợ giúp" dường như là bất kỳ lớp nào có thiết kế hỗ trợ lớp khác. Những điều này có thể có hoặc không phụ thuộc vào dự án của bạn. Nếu bạn đang tạo một GameNetworkClientlớp, bạn có thể nói rằng GameNetworkConnectionlớp là một 'người trợ giúp', bởi vì nó "giúp" GameNetworkClient.

Cách các nhà phát triển đề cập đến các công cụ phản ánh cách sử dụng phổ biến của những từ này. Nếu bạn có thể nhớ lại các công cụ nghe được mô tả là "hữu ích" so với "hữu ích", một công cụ hữu ích có xu hướng có một số ngữ cảnh (máy xay pho mát giúp nạo pho mát, máy tước ngô giúp tước ngô, bộ nạp tốc độ giúp nạp lại súng). Một "tiện ích" dự kiến ​​sẽ hoạt động trong nhiều bối cảnh khác nhau (WD-40, băng keo, dao quân đội, keo dán, đèn pin, v.v.).


5

Như Jesper đã nói, nó hoàn toàn tùy ý . Bạn có thể nghĩ ra những gì phù hợp với tổ chức của mình và đưa ra quy ước.

Đối với tôi, nó giống như thế này:

utils - Lớp tĩnh, có thể được di chuyển và nhập tự do ở bất cứ đâu.

Thực hiện các nhiệm vụ chung có thể hữu ích trong các mô-đun khác nhau. Như Peter Lawrey đã nói, những cái tên cụ thể hơn rất hữu ích.

helper - Lớp giúp đỡ một lớp khác hoặc một mô-đun.

Các tác vụ chỉ được sử dụng trong mô-đun mà nó được đặt và sẽ không hợp lý khi được nhập ở nơi khác. Do đó, tên có thể cụ thể hơn - Trình trợ giúp Tên mô - đun (ví dụ: Quản trị viên , Trình hỗ trợ đăng nhập )


2

Không có câu trả lời cuối cùng cho điều này. Tìm ra một sơ đồ đặt tên và gắn bó với nó. Đặt tên cho các gói và lớp của bạn là một phần quan trọng của kiến ​​trúc phần mềm và không ai có thể tước bỏ quyết định đó của bạn.

Cá nhân tôi thích XHelper hơn, nhưng tôi thấy XUtils thường xuyên hơn trong mã nước ngoài.

Tôi cũng thích cách đặt tên "số nhiều" mà bạn sẽ tìm thấy trong cả JDK và Guava :

nếu một lớp xử lý Collectioncác đối tượng, nó được gọi làCollections

Mảng> Mảng (jdk)
Danh sách> Danh sách (ổi)
Bản đồ> Bản đồ (ổi)

Vân vân.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.