อะไรคือความแตกต่างระหว่างคลาส Helper และ Utility?


116

วิธีกำหนดวิธีเรียกคลาส XHelper หรือ XUtils

ในใจของฉัน :

คลาส Helperเป็นคลาสที่สามารถสร้างอินสแตนซ์และทำงานทางธุรกิจได้

คลาส Utilsเป็นคลาสแบบคงที่ที่ดำเนินการขนาดเล็กและทำซ้ำในอินสแตนซ์ประเภทหนึ่ง (ตัวอย่างของคลาส utils ArrayUtils หรือ IOUtils จาก Apache)


5
"งานธุรกิจ" คือความแตกต่างที่สำคัญของที่นี่ ฉันพบว่าเป็นแบบแผนที่มีประโยชน์ในการใช้Utilsสำหรับคลาสแบบคงที่ซึ่งสามารถใช้ได้ทุกที่ในองค์กรหรือในองค์กรอื่น Helperชั้นจะมีรหัสทั่วไปซึ่งสามารถนำกลับมาใช้ภายในโครงการและมีการอ้างอิงภายในโครงการ แน่นอนว่าไม่มีกฎที่ยอมรับโดยทั่วไป แต่ฉันคิดว่ามันมีประโยชน์
Stephen Hosking

1
@StephenHosking คำอธิบายของคุณเป็นการโน้มน้าวใจฉันมากที่สุดและอาจจะสำหรับทุกคน หากเป็นไปได้คุณจะโพสต์คำอธิบายของคุณเป็นคำตอบที่แท้จริงสำหรับโพสต์นี้แทนที่จะแสดงความคิดเห็น
Bigair

@ บิ๊กแอร์. ขอบคุณ แต่ของฉันเป็นเพียงข้อเสนอแนะไม่ใช่คำตอบ ฉันดีใจที่มีคนพบว่ามันเป็นประโยชน์
Stephen Hosking

คำตอบ:


102

มีรูปแบบการตั้งชื่อมากมายให้ใช้ ฉันอยากจะแนะนำ Utils เพียงเพราะมันธรรมดากว่า

คลาสยูทิลิตี้เป็นที่เข้าใจกันว่ามีเฉพาะเมธอดแบบคงที่และไร้สัญชาติ คุณจะไม่สร้างอินสแตนซ์ของคลาสดังกล่าว

ตัวช่วยสามารถเป็นคลาสยูทิลิตี้หรืออาจเป็นสถานะหรือต้องสร้างอินสแตนซ์ ฉันจะหลีกเลี่ยงสิ่งนี้ถ้าเป็นไปได้

หากคุณสามารถตั้งชื่อให้เฉพาะเจาะจงมากขึ้น เช่นถ้ามีวิธีการจัดเรียงให้เป็น XSorter

สำหรับอาร์เรย์คุณสามารถค้นหาคลาสตัวช่วยเช่น

Array
Arrays
ArrayUtil
ArrayUtils
ArrayHelper

BTW มือสั้นสำหรับคลาสยูทิลิตี้คือ enum ที่ไม่มีอินสแตนซ์

enum XUtils {;
    static methods here
}

หากคุณต้องการใช้อินเทอร์เฟซฉันจะใช้ Singleton แบบไร้สัญชาติ

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

ฉันนี่ในโพสต์นี้stackoverflow.com/a/2135797/787698ว่า Xutils เป็นคลาสคงที่ไม่มีการอ้างอิง คุณกำลังคิดอะไรเกี่ยวกับเรื่องนี้?
jakcam

@jakcam จุดที่น่าสนใจ. ผู้ช่วยเหลืออาจมีสถานะและต้องการอินสแตนซ์ ฉันจะใช้คลาสยูทิลิตี้ไร้สัญชาติและไม่มีอินสแตนซ์ถ้าเป็นไปได้
Peter Lawrey

Xutils คุณเข้าใจอะไรบ้างว่าเป็นคลาสแบบคงที่ที่ไม่มีการอ้างอิง ?
jakcam

ฉันไม่พบ "xutils" หรือ "ไม่มีการอ้างอิง" ในโพสต์นั้น
Peter Lawrey

1
@ จอห์นในกรณีนี้วิธีการยูทิลิตี้ไม่เป็นที่ต้องการเนื่องจากเป็นการยากที่จะเยาะเย้ยเพื่อวัตถุประสงค์ในการทดสอบ
Peter Lawrey


8

ยูทิลิตี้คือคลาส "leaf node" สำหรับการใช้งานทั่วไป นั่นคือไม่มีการอ้างอิงใด ๆ ในโปรเจ็กต์ของคุณและสามารถย้ายจากโปรเจ็กต์หนึ่งไปอีกโปรเจ็กต์โดยไม่ทำลายหรือไร้ประโยชน์ ตัวอย่าง: Vector3, RandomNumberGenerator, StringMatcherฯลฯ ...

"ตัวช่วย" ดูเหมือนจะเป็นคลาสใดก็ได้ที่ออกแบบมาเพื่อช่วยเหลือคลาสอื่น สิ่งเหล่านี้อาจขึ้นอยู่กับโครงการของคุณหรือไม่ก็ได้ หากคุณกำลังสร้างGameNetworkClientชั้นเรียนคุณอาจบอกว่าGameNetworkConnectionชั้นเป็น 'ผู้ช่วย' เพราะมัน GameNetworkClient"จะช่วยให้ที่"

วิธีที่นักพัฒนาอ้างถึงเครื่องมือสะท้อนถึงการใช้คำเหล่านี้โดยทั่วไป หากคุณจำเครื่องมือช่วยฟังที่อธิบายว่า "มีประโยชน์" เทียบกับ "มีประโยชน์" ได้เครื่องมือที่มีประโยชน์มักจะมีบริบทบางอย่าง (ที่ขูดชีสช่วยในการขูดชีสเครื่องปอกข้าวโพดช่วยในการลอกข้าวโพดเครื่องลดความเร็วช่วยในการโหลดอาวุธปืนใหม่) คาดว่า "ยูทิลิตี้" จะใช้งานได้ในหลายบริบท (WD-40 เทปพันสายไฟมีดทหารกาวไฟฉาย ฯลฯ ... )


5

ในฐานะที่เป็น Jesper กล่าวว่ามันพลทั้งหมด คุณสามารถนึกถึงสิ่งที่เหมาะกับองค์กรของคุณและทำให้การประชุมนั้นเป็นไปได้

สำหรับฉันมันเป็นแบบนี้:

utils - คลาสคงที่ซึ่งสามารถเคลื่อนย้ายและนำเข้าได้อย่างอิสระทุกที่

ทำงานทั่วไปที่อาจเป็นประโยชน์ในโมดูลต่างๆ ดังที่ Peter Lawrey กล่าวว่าชื่อที่เฉพาะเจาะจงมากขึ้นมีประโยชน์

helper - คลาสที่ช่วยคลาสอื่นหรือโมดูล

งานที่ใช้ในโมดูลเท่านั้นที่วางไว้และจะไม่เหมาะสมที่จะนำเข้าที่อื่น ดังนั้นชื่ออาจมีความเฉพาะเจาะจงมากขึ้น - ModuleName Helper (เช่นAdministrationHelper , LoginHelper )


2

ไม่มีคำตอบที่ดีที่สุดสำหรับสิ่งนี้ หารูปแบบการตั้งชื่ออย่างใดอย่างหนึ่งและยึดติดกับมัน การตั้งชื่อแพ็กเกจและคลาสของคุณเป็นส่วนสำคัญของสถาปัตยกรรมซอฟต์แวร์และไม่มีใครสามารถนำการตัดสินใจนั้นไปจากคุณได้

โดยส่วนตัวฉันชอบ XHelper มากกว่า แต่ฉันเห็น XUtils บ่อยกว่าในรหัสต่างประเทศ

ฉันชอบรูปแบบการตั้งชื่อ "พหูพจน์" ที่คุณจะพบทั้งใน JDK และGuava :

ถ้าคลาสเกี่ยวข้องกับCollectionวัตถุจะเรียกว่าCollections

Array> Arrays (jdk)
List> Lists (guava)
Map> Maps (guava)

เป็นต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.