Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

นี่คือโพสต์ที่แปลด้วย AI

제이온

[Effective Java] รายการ 5: ใช้การฉีดการพึ่งพาแทนการระบุทรัพยากร

เลือกภาษา

  • ไทย
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

สรุปโดย AI ของ durumis

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

หากคลาสขึ้นอยู่กับทรัพยากรภายในอย่างน้อยหนึ่งทรัพยากร และทรัพยากรดังกล่าวมียอดคงเหลือที่มีผลต่อการทำงานของคลาส ไม่ควรใช้ซิงเกิลตันและคลาสยูทิลิตี้แบบคงที่


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


ตัวอย่าง

ตัวอย่างการใช้คลาสยูทิลิตี้แบบคงที่

public class SpellChecker {

    private static final Lexicon dictionary = new Lexicon();

    private SpellChecker() {
    }

    public static boolean isValid(String word) {
        // ตรรกะที่ใช้พจนานุกรม
    }

    public static List suggestions(String typo) {
        // ตรรกะที่ใช้พจนานุกรม
    }

คลาสยูทิลิตี้ดังกล่าวถือว่าใช้พจนานุกรมเพียงหนึ่งพจนานุกรมเท่านั้น แต่ในความเป็นจริง พจนานุกรมจะแยกตามภาษา และอาจมีพจนานุกรมสำหรับคำศัพท์เฉพาะแยกต่างหาก


ตัวอย่างการใช้คลาสซิงเกิลตัน

public class SpellChecker {

    private final Lexicon dictionary = new Lexicon();

    public static SpellChecker INSTANCE = new SpellChecker();

    private SpellChecker() {
    }

    public static boolean isValid(String word) {
        // ตรรกะที่ใช้พจนานุกรม
    }

    public static List suggestions(String typo) {
        // ตรรกะที่ใช้พจนานุกรม
    }


คลาสซิงเกิลตันก็ถือว่าใช้พจนานุกรมเพียงหนึ่งพจนานุกรมเท่านั้น ดังนั้นจึงพบข้อเสียเดียวกันกับข้างต้น


วิธีแก้ปัญหา 1 - ลบคำสำคัญสุดท้ายออกจากฟิลด์

public class SpellChecker {

    private Lexicon dictionary = new Lexicon();

    public static SpellChecker INSTANCE = new SpellChecker();

    private SpellChecker() {
    }

    public static void changeDictionary(Lexicon dictionary) {
        this.dictionary = dictionary;
    }

    public static boolean isValid(String word) {
        // ตรรกะที่ใช้พจนานุกรม
    }

    public static List suggestions(String typo) {
        // ตรรกะที่ใช้พจนานุกรม
    }


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


วิธีแก้ปัญหา 2 - ใช้การฉีดการพึ่งพา

public class SpellChecker {

    private final Lexicon dictionary;

    public SpellChecker(Lexicon dictionary) {
        this.dictionary = dictionary;
    }

    public static boolean isValid(String word) {
        // ตรรกะที่ใช้พจนานุกรม
    }

    public static List suggestions(String typo) {
        // ตรรกะที่ใช้พจนานุกรม
    }


จากตัวอย่างนี้ เราสามารถเห็นได้ว่าคลาสคงที่และคลาสซิงเกิลตันไม่ควรพึ่งพาทรัพยากรภายใน นั่นหมายความว่าควรได้รับการฉีดจากภายนอก


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


การฉีดการพึ่งพาเป็นเพียงวิธีการส่งผ่านทรัพยากรโดยตรงเท่านั้น แต่บ่อยครั้งที่ใช้การส่งผ่านโรงงานทรัพยากร โรงงานคืออ็อบเจ็กต์ที่สร้างอินสแตนซ์ของประเภทที่ระบุซ้ำ ๆ ทุกครั้งที่เรียก วิธีนี้เรียกว่ารูปแบบโรงงานเมธอด และ Supplier ใน Java 8 เป็นตัวอย่างที่สมบูรณ์แบบของโรงงาน


public static List create(Supplier generator) {
    ...


โดยทั่วไปจะใช้ประเภทไวด์การ์ดแบบจำกัดเพื่อจำกัดพารามิเตอร์ประเภทของโรงงาน วิธีนี้ช่วยให้ไคลเอ็นต์สามารถส่งผ่านโรงงานใด ๆ ที่เป็นประเภทย่อยของประเภทที่ระบุ


การฉีดการพึ่งพาช่วยปรับปรุงความยืดหยุ่นและความสะดวกในการทดสอบ แต่ในโครงการที่มีการพึ่งพาจำนวนมาก ค่าใช้จ่ายจะสูงมาก ในกรณีนี้ คุณสามารถใช้กรอบงานการพึ่งพา (Dagger, Guice, Spring ฯลฯ) เพื่อลดค่าใช้จ่าย


แหล่งที่มา

제이온
제이온
제이온
제이온
[Effective Java] รายการที่ 3: รับประกัน Singleton ด้วยคอนสตรัคเตอร์ส่วนตัวหรือไดเร็กทอรี แนะนำสามวิธีในการนำรูปแบบ Singleton ไปใช้ใน Java (สมาชิก public static, วิธีการแบบคงที่, ประเภทการแจกแจง) และอธิบายข้อดีข้อเสียของแต่ละวิธีและข้อควรระวังเมื่อ ทำการลำดับ อธิบายถึงประเภทการแจกแจงเป็นวิธีที่เหมาะสมที่สุดเมื่อพิจารณาถึงความปลอดภัย จากการโจม

27 เมษายน 2567

[Effective Java] รายการ 6. หลีกเลี่ยงการสร้างอ็อบเจ็กต์ที่ไม่จำเป็น คู่มือเกี่ยวกับวิธีลดการสร้างอ็อบเจ็กต์ที่ไม่จำเป็นใน Java อ็อบเจ็กต์แบบไม่เปลี่ยนแปลง เช่น String, Boolean ควรใช้ลิเทอรัล และควรแคชอินสแตนซ์ Pattern สำหรับนิพจน์ทั่วไป นอกจากนี้ การออโต้บอกซ์อาจทำให้ประสิทธิภาพลดลง ดังนั้นจึงควรใช้ประเภทพื้นฐาน รายละเอีย

28 เมษายน 2567

[Effective Java] รายการ 4. ใช้ตัวสร้างส่วนตัวเพื่อป้องกันการสร้างอินสแตนซ์ สำหรับคลาสยูทิลิตี้ที่มีเพียงเมธอดคงที่และฟิลด์ ควรตั้งค่าตัวสร้างให้เป็นส่วนตัวเพื่อป้องกันการสร้างอินสแตนซ์ วิธีนี้จะช่วยป้องกันผู้ใช้จากการเข้าใจผิดว่าตัวสร้างถูกสร้างขึ้นโดยอัตโนมัติ และทำให้ไม่สามารถสืบทอดได้ ทำให้ความตั้งใจของคลาสชัดเจนขึ้น

28 เมษายน 2567

วิธีที่ Rust ป้องกันบั๊กแบบพร้อมกัน Rust เป็นภาษาที่ทรงพลังในการแก้ปัญหาความท้าทายของการเขียนโปรแกรมแบบพร้อมกัน ระบบประเภทและแบบจำลองการเป็นเจ้าของทำให้การส่งผ่านและการแชร์ข้อมูลระหว่างเธรดปลอดภัย Mutex, Channel, Atomic และรูปแบบความแปรปรวนภายในอื่น ๆ ช่วยให้คุณกำหนดและใช้ตัวแปรที่แชร์ได้อย
곽경직
곽경직
곽경직
곽경직
곽경직

28 มีนาคม 2567

การสร้างแบบจำลองข้อมูลเชิงแนวคิด การสร้างแบบจำลองข้อมูลเชิงแนวคิดเป็นกระบวนการแยกเอนทิตีและแสดงความสัมพันธ์ระหว่างเอนทิตีในรูปแบบ ERD เอนทิตีเป็นหน่วยข้อมูลอิสระ และแอตทริบิวต์คือข้อมูลที่เอนทิตีมี ตัวระบุคือสิ่งที่ระบุเอนทิตีเฉพาะและความสัมพันธ์แสดงถึงการโต้ตอบระหว่างเอนทิตี คาร์ดินัลลิ
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 เมษายน 2567

[ไม่มีพื้นฐานทางวิศวกรรมคอมพิวเตอร์ การอยู่รอดในฐานะนักพัฒนา] 14. สรุปเนื้อหาการสัมภาษณ์ทางเทคนิคที่นักพัฒนาหน้าใหม่ถามบ่อย คู่มือเตรียมตัวสัมภาษณ์งานเทคนิคสำหรับนักพัฒนาหน้าใหม่ บทความนี้จะอธิบายแนวคิดที่มักปรากฏใน การสัมภาษณ์งาน เช่น พื้นที่หน่วยความจำหลัก โครงสร้างข้อมูล RDBMS และ NoSQL การเขียนโปรแกรมเชิงโครงสร้างและเชิงวัตถุ การโอเวอร์ไรด์และการโอเวอร์โหลด อัลกอริทึมการเป
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 เมษายน 2567

[Javascript] โครงสร้างของวัตถุ (V8) วัตถุของ JavaScript ในเครื่องยนต์ V8 ถูกแปลงเป็น Fast mode ที่ปรับให้เหมาะสมเหมือนโครงสร้างข้อมูลตามสถานะและ Dictionary mode ที่ทำงานเป็นแฮชแมป Fast mode เร็วเนื่องจากคีย์และค่าอยู่ในรูปแบบคงที่เกือบทั้งหมด แต่เมื่อมีการเพิ่มคีย์ใหม่หรือดำเนินการลบองค์ประ
곽경직
곽경직
곽경직
곽경직
곽경직

18 มีนาคม 2567

[นอกสายงาน วิศวกรซอฟต์แวร์อยู่รอด] 7. สิ่งที่ช่วยและไม่ช่วยในงานใหม่ ในการเตรียมตัวหางานวิศวกรซอฟต์แวร์ บล็อกเทคนิคอาจไม่มีประสิทธิภาพ แต่ GitHub แนะนำสำหรับการจัดการโครงการและการแชร์ซอร์สโค้ด หลายใบรับรอง ควรเตรียมใบรับรองวิชาชีพด้านสารสนเทศเป็นหลัก และขึ้นอยู่กับวุฒิการศึกษา ควรเลือกใบรับรองช่างฝีมือ ช่างเทคนิค หรือวิศวก
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

29 มีนาคม 2567

การสร้างแบบจำลองข้อมูลเชิงกายภาพ การสร้างแบบจำลองข้อมูลเชิงกายภาพคือกระบวนการออกแบบตารางฐานข้อมูลเชิงสัมพันธ์เพื่อให้สามารถใช้งานได้จริง โดยมีเป้าหมายเพื่อเพิ่มประสิทธิภาพ โดยการพิจารณาประสิทธิภาพในการใช้พื้นที่จัดเก็บ การแบ่งพาร์ติชันข้อมูล การออกแบบดัชนี เป็นต้น สามารถแก้ไขปัญหาประสิทธ
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 เมษายน 2567