คำถามติดแท็ก design-patterns

รูปแบบการออกแบบเป็นโซลูชันที่ใช้ซ้ำได้ทั่วไปสำหรับปัญหาที่เกิดขึ้นทั่วไปในการออกแบบซอฟต์แวร์


4
การผกผันของการควบคุมคืออะไรและฉันควรใช้เมื่อใด
ฉันกำลังออกแบบระบบใหม่และฉันต้องการทราบว่าการควบคุมกลับกัน (IOC) คืออะไรและที่สำคัญเมื่อใช้ จะต้องมีการใช้งานกับอินเตอร์เฟสหรือสามารถทำได้กับคลาส?

6
การรวมวัตถุเป็นเทคนิคที่เลิกใช้หรือไม่?
ฉันคุ้นเคยกับแนวคิดของการรวมวัตถุและฉันพยายามที่จะใช้มันให้มากที่สุด นอกจากนี้ฉันมักจะคิดว่าการรวมวัตถุเป็นบรรทัดฐานมาตรฐานที่ฉันสังเกตเห็นว่า Java เองรวมถึงกรอบงานอื่น ๆ ที่ใช้ร่วมกันมากที่สุด เมื่อเร็ว ๆ นี้แม้ว่าฉันจะอ่านอะไรบางอย่างที่เป็นของใหม่ การรวมกำไรนั้นทำให้ประสิทธิภาพของโปรแกรมแย่ลงโดยเฉพาะในแอปพลิเคชันที่เกิดขึ้นพร้อมกันและขอแนะนำให้สร้างอินสแตนซ์newวัตถุแทนเนื่องจากใน JVM รุ่นใหม่การสร้างอินสแตนซ์ของวัตถุนั้นเร็วมาก ฉันอ่านสิ่งนี้ในหนังสือ: Java Concurrency in Practice ตอนนี้ฉันเริ่มคิดว่าถ้าฉันเข้าใจบางสิ่งบางอย่างที่นี่ตั้งแต่ส่วนแรกของหนังสือแนะนำให้ใช้Executorsซ้ำนั้นThreadแทนที่จะสร้างอินสแตนซ์ใหม่ การรวมวัตถุได้กลายเป็นที่นิยมในปัจจุบัน?

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

2
การสื่อสารระหว่างคำสั่งซ้อน
ดูเหมือนจะมีวิธีการสื่อสารค่อนข้างน้อยระหว่างคำสั่ง สมมติว่าคุณมีคำสั่งซ้อนกันซึ่งคำสั่งภายในต้องสื่อสารบางสิ่งกับภายนอก (เช่นถูกเลือกโดยผู้ใช้) <outer> <inner></inner> <inner></inner> </outer> จนถึงตอนนี้ฉันมี 5 วิธีในการทำเช่นนี้ require: คำสั่งผู้ปกครอง innerสั่งสามารถต้องouterสั่งซึ่งสามารถเปิดเผยวิธีการบางอย่างเกี่ยวกับการควบคุมของตน ดังนั้นในinnerความหมาย require: '^outer', link: function(scope, iElement, iAttrs, outerController) { // This can be passed to ng-click in the template $scope.chosen = function() { outerController.chosen(something); } } และในouterตัวควบคุมของคำสั่ง: controller: function($scope) { this.chosen = function(something) { } } $emit …

12
นี่เป็นกรณีการใช้งานที่ดีสำหรับ goto ใน C หรือไม่?
ฉันลังเลที่จะถามสิ่งนี้เพราะฉันไม่ต้องการที่จะ "เรียกร้องการโต้วาทีการโต้เถียงหรือการอภิปรายเพิ่มเติม" แต่ฉันยังใหม่กับ C และต้องการที่จะได้รับข้อมูลเชิงลึกมากขึ้นเกี่ยวกับรูปแบบทั่วไปที่ใช้ในภาษา ฉันเพิ่งได้ยินความไม่พอใจgotoคำสั่งบางอย่างแต่เมื่อเร็ว ๆ นี้ฉันก็พบว่ามีกรณีการใช้งานที่ดีสำหรับมัน รหัสเช่นนี้: error = function_that_could_fail_1(); if (!error) { error = function_that_could_fail_2(); if (!error) { error = function_that_could_fail_3(); ...to the n-th tab level! } else { // deal with error, clean up, and return error code } } else { // deal with error, …

8
ORM เป็น Anti-Pattern หรือไม่ [ปิด]
ฉันมีการสนทนาที่กระตุ้นและขัดขวางมากกับเพื่อนร่วมงานเกี่ยวกับ ORM และข้อดีและข้อเสีย ในความคิดของฉัน ORM มีประโยชน์เฉพาะในกรณีที่หายาก อย่างน้อยในประสบการณ์ของฉัน แต่ฉันไม่ต้องการแสดงข้อโต้แย้งของตัวเองในเวลานี้ ดังนั้นฉันถามคุณคุณคิดอย่างไรเกี่ยวกับออม? ข้อดีและข้อเสียคืออะไร?

3
อะไรคือ DRY, KISS, SOLID และอื่น ๆ
รูปแบบการออกแบบวิธีการหรือสิ่งที่อยู่ระหว่างนั้นเป็นอย่างไร พวกเขาไม่ได้มีการใช้งานเฉพาะที่สามารถแสดงให้เห็นถึงความจำเป็น (แม้ว่าคุณจะสามารถแสดงให้เห็นถึงกรณีที่ไม่ได้ใช้สิ่งที่ต้องการเช่น KISS ... ดูWTF รายวันสำหรับตัวอย่างมากมาย) และพวกเขาอธิบายกระบวนการพัฒนาอย่างเต็มที่เช่นระเบียบวิธี โดยทั่วไปจะ สิ่งนี้จะทำให้ "กฎของหัวแม่มือ" ประเภทนี้อยู่ที่ไหน

6
การวนรอบเหตุการณ์เป็นเพียงการวนรอบ / ขณะที่การหยั่งสัญญาณที่ปรับปรุงแล้ว
ฉันพยายามเข้าใจว่าวงเหตุการณ์คืออะไร บ่อยครั้งที่คำอธิบายคือในเหตุการณ์วนรอบคุณทำบางสิ่งบางอย่างจนกว่าคุณจะได้รับแจ้งว่ามีเหตุการณ์เกิดขึ้น จากนั้นคุณจัดการกับกิจกรรมและทำสิ่งที่คุณเคยทำมาก่อน เพื่อแมปคำจำกัดความข้างต้นด้วยตัวอย่าง ฉันมีเซิร์ฟเวอร์ที่ 'คอยฟัง' ในเหตุการณ์ลูปและเมื่อตรวจพบการเชื่อมต่อซ็อกเก็ตข้อมูลจากมันจะถูกอ่านและแสดงหลังจากนั้นเซิร์ฟเวอร์จะกลับมาทำงาน / เริ่มฟังเหมือนเดิม อย่างไรก็ตามเหตุการณ์นี้เกิดขึ้นและพวกเราได้รับแจ้งว่า 'แบบนั้น' นั้นเป็นเรื่องที่ฉันต้องรับมือ คุณสามารถพูดได้ว่า: "ไม่ใช่" แบบนั้น "คุณต้องลงทะเบียนผู้ฟังเหตุการณ์" แต่สิ่งที่ฟังเหตุการณ์ แต่ฟังก์ชั่นที่ด้วยเหตุผลบางอย่างจะไม่กลับมา มันอยู่ในวงของตัวเองกำลังรอการแจ้งเตือนเมื่อมีเหตุการณ์เกิดขึ้น? ผู้ฟังเหตุการณ์ควรลงทะเบียนผู้ฟังเหตุการณ์ด้วยหรือไม่ มันจะจบที่ไหน? เหตุการณ์เป็นสิ่งที่เป็นนามธรรมที่ดีในการทำงานด้วย แต่เป็นเพียงสิ่งที่เป็นนามธรรม ฉันเชื่อว่าในท้ายที่สุดการเลือกตั้งไม่สามารถหลีกเลี่ยงได้ บางทีเราไม่ได้ทำมันในรหัสของเรา แต่ระดับที่ต่ำกว่า (การใช้ภาษาการเขียนโปรแกรมหรือระบบปฏิบัติการ) กำลังทำเพื่อเรา โดยทั่วไปแล้วจะมากับรหัสเทียมต่อไปนี้ซึ่งทำงานอยู่ในระดับต่ำพอจึงไม่ทำให้เกิดการรอคอย: while(True): do stuff check if event has happened (poll) do other stuff นี่คือความเข้าใจของฉันของความคิดทั้งหมดและฉันต้องการที่จะได้ยินว่ามันถูกต้อง ฉันเปิดกว้างในการยอมรับว่าความคิดทั้งหมดนั้นผิดอย่างสิ้นเชิงซึ่งในกรณีนี้ฉันต้องการคำอธิบายที่ถูกต้อง

7
การฉีดแบบพึ่งพานั้นเป็นสิ่งจำเป็นสำหรับการทดสอบหน่วยหรือไม่?
การใช้การฉีดพึ่งพา (DI) จำเป็นสำหรับการทดสอบหน่วยหรือไม่ ฉันไม่สามารถคิดวิธีอื่นในการแยกรหัสเพื่อให้สามารถทดสอบได้ นอกจากนี้ตัวอย่างทั้งหมดที่ฉันเคยเห็นใช้รูปแบบนี้ นั่นเป็นเพราะมันเป็นทางเลือกเดียวที่ทำงานได้หรือมีทางเลือกอื่น ๆ ?

8
คำศัพท์ (หรือ“ รูปแบบ”) สำหรับ“ ทำอะไรบางอย่างถ้ายังไม่ได้ทำ” [ปิด]
ฟังดูพื้นฐานดีฉันรู้ แต่เมื่อเร็ว ๆ นี้มีเพื่อนร่วมงานคนหนึ่งบอกฉันว่าวิธีการที่เรียกว่าstartHttpServerซับซ้อนเกินไปที่จะเข้าใจเพราะมันเริ่มเซิร์ฟเวอร์เท่านั้นหากยังไม่ได้ทำงาน ฉันพบว่าฉันมีปัญหาเมื่อฉันตอบว่า "จริงจังฉันทำสิ่งนี้มานานหลายสิบปีแล้ว - มันเป็นรูปแบบทั่วไปในการเขียนโปรแกรม" บ่อยครั้งกว่าที่ฉันจะยอมรับว่าเขากลับมาพร้อมกับเอกสารหลักฐานบางอย่างที่แสดงว่าชุมชนการเขียนโปรแกรมทั้งหมดอยู่เบื้องหลังมุมมองของเขาและฉันก็รู้สึกอาย คำถาม : มีรูปแบบการออกแบบที่จัดทำเป็นเอกสารไว้เบื้องหลังแนวคิดของวิธีการที่ไม่ใช้งานหรือไม่หากการกระทำที่ต้องการมีผลบังคับใช้แล้วหรือไม่? หรือถ้าไม่ใช่รูปแบบจะมีชื่อด้วยหรือไม่? และถ้าไม่มีมีเหตุผลใดที่คิดว่ามันซับซ้อนเกินกว่าที่จะพิจารณาการเขียนวิธีในลักษณะนี้?

8
สถาปัตยกรรม MVC - ฉันต้องการคอนโทรลเลอร์จำนวนเท่าใด
ฉันได้รับการเข้ารหัสในขณะที่ แต่ส่วนใหญ่สคริปต์และโปรแกรมที่เรียบง่าย ฉันได้ย้ายไปสู่บทบาทใหม่ที่เกี่ยวข้องกับการพัฒนาเว็บแอปและใช้สถาปัตยกรรม MVC ที่เหมาะสมดังนั้นฉันจึงพยายามเรียนรู้เกี่ยวกับสิ่งเหล่านั้นอย่างรวดเร็ว ฉันหวังว่าคำถามนี้จะไม่คล้ายกับ " แนวทางปฏิบัติที่ดีที่สุดสำหรับสถาปัตยกรรม MVC " แต่เมื่อฉันทำแบบฝึกหัดที่แตกต่างกันสองสามครั้งฉันสังเกตเห็นว่าบางคนมีตัวควบคุมหลายตัวสำหรับสิ่งที่แตกต่างกัน แอปพลิเคชันเว็บเดียวต้องมีคอนโทรลเลอร์จำนวนเท่าใด ฉันรู้ว่ามันคงยากที่จะตอบโดยไม่มีตัวอย่างดังนั้นฉันจะให้: การประยุกต์ใช้: ผู้ใช้เข้าสู่ระบบ ผู้ใช้สามารถทำหนึ่งในสามสิ่งต่อไปนี้: ก) อัปโหลดไฟล์ (เก็บไว้ในฐานข้อมูล mongodb พร้อมข้อมูลเมตา) b) ค้นหาไฟล์ c) ออกจากระบบ คำถามของฉันเป็นคำถามทั่วไป แต่ฉันยกตัวอย่างเพื่อช่วยใครก็ตามที่พยายามจะตอบ

2
แนวปฏิบัติที่ดีที่สุด / รูปแบบสำหรับการซิงโครไนซ์ข้อมูลแบบสองทาง
บ่อยครั้งในงานของฉันแนวคิดเกี่ยวกับการซิงโครไนซ์ข้อมูลแบบ 2 ทางระหว่างระบบฐานข้อมูลทำให้ข้อมูลเกิด ตัวอย่างคลาสสิกคือระบบ CRM ที่แตกต่างกันสองระบบ (เช่น Raiser's Edge และ Salesforce) และจำเป็นต้องมีการซิงค์ข้อมูลผู้ติดต่อสองทางระหว่างกัน ข้อควรพิจารณาเกี่ยวกับ API นอกเหนือจากสมมติว่าคุณมีคีย์ที่ใช้ร่วมกันในการซิงค์และคิดถึงอัลกอริธึม / รูปแบบที่จะใช้อย่างหมดจดนี่เป็นงานที่มักจะถูกประเมินโดยผู้ที่ไม่ใช่ช่างเทคนิค ตัวอย่างเช่นคุณต้องระวัง: คุณสามารถตรวจสอบระเบียนที่มีการเปลี่ยนแปลงในทั้งสองระบบได้อย่างง่ายดาย (หรือคุณจะต้องเปรียบเทียบระเบียนทั้งหมดระหว่างระบบเพื่อตรวจจับการเปลี่ยนแปลง) หากคุณกำลังจะทำการซิงค์หนึ่งครั้งทุก ๆ ชั่วโมงวิธีการจัดการกับความขัดแย้งที่การเปลี่ยนแปลงระเบียนเดียวกันในเวลาเดียวกันมากขึ้นหรือน้อยลงในทั้งสองระบบ หากคุณกำลังทำการซิงค์แบบเรียลไทม์ (เช่นการอัปเดตในระบบหนึ่งจะกระตุ้นการอัปเดตไปยังระบบอื่นทันที) วิธีจัดการความแตกต่างเมื่อเวลาผ่านไปเนื่องจากข้อบกพร่องหรือระบบล่ม โดยส่วนตัวฉันสามารถคิดหาวิธีจัดการกับสิ่งเหล่านี้ทั้งหมด แต่ฉันสงสัยว่ามีรูปแบบที่เป็นที่รู้จักกันดีวรรณกรรมหรือแนวปฏิบัติที่ดีที่สุดที่ฉันสามารถอ้างถึงได้หรือไม่

2
การปรับปรุง MVP ผ่าน MVC คืออะไร
ฉันได้อ่านสามวันเกี่ยวกับModel-View-Controller (MVC)และModel-View-Presenter (MVP)รูปแบบ และมีคำถามหนึ่งที่รบกวนจิตใจฉันอย่างมาก ทำไมนักออกแบบซอฟต์แวร์จึงคิดค้น MVP เมื่อมี MVC อยู่แล้ว พวกเขาประสบปัญหาอะไรบ้าง MVC ไม่ได้แก้ปัญหา (หรือแก้ไขไม่ดี) แต่ MVP สามารถแก้ไขได้ MVP ปัญหาใดที่ตั้งใจจะแก้ไข? ฉันได้อ่านบทความมากมายเกี่ยวกับประวัติและคำอธิบายของ MVP หรือเกี่ยวกับความแตกต่างระหว่าง MVC และ MVP แต่ไม่มีคำตอบที่ชัดเจนสำหรับคำถามของฉัน ในหนึ่งในบทความที่ฉันอ่านมันก็บอกว่า: ตอนนี้เข้าสู่ Model View Presenter ซึ่งเป็นการตอบสนองต่อความไม่เพียงพอของรูปแบบ MVC เมื่อนำไปใช้กับส่วนติดต่อผู้ใช้แบบกราฟิกที่ใช้องค์ประกอบที่ทันสมัย ในระบบ GUI ที่ทันสมัยส่วนประกอบของ GUI จะจัดการกับอินพุตของผู้ใช้เช่นการเคลื่อนไหวของเมาส์และการคลิกแทนที่จะเป็นตัวควบคุมส่วนกลาง ดังนั้นฉันจึงไม่เข้าใจ แต่จริง ๆ แล้วมันสามารถเป็นไปได้ในทางอื่นเช่นองค์ประกอบ GUI ไม่จัดการกับการป้อนข้อมูลของผู้ใช้ด้วยตัวเอง? และ "จัดการกับตัวเอง" หมายความว่าอย่างไร?

10
เราควรหลีกเลี่ยงวัตถุที่กำหนดเองเป็นพารามิเตอร์?
สมมติว่าฉันมีวัตถุที่กำหนดเองนักเรียน : public class Student{ public int _id; public String name; public int age; public float score; } และคลาส, หน้าต่างที่ใช้เพื่อแสดงข้อมูลของนักเรียน : public class Window{ public void showInfo(Student student); } มันดูค่อนข้างปกติ แต่ฉันพบว่าWindowนั้นไม่ง่ายที่จะทำการทดสอบเป็นรายบุคคลเพราะมันต้องการออบเจ็กต์Studentจริงเพื่อเรียกใช้ฟังก์ชัน ดังนั้นฉันจึงพยายามปรับเปลี่ยน showInfo เพื่อที่จะไม่ยอมรับวัตถุนักเรียนโดยตรง: public void showInfo(int _id, String name, int age, float score); เพื่อให้ง่ายต่อการทดสอบหน้าต่างแยกต่างหาก: showInfo(123, "abc", 45, 6.7); แต่ฉันพบว่าเวอร์ชันที่แก้ไขมีปัญหาอื่น: …

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