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

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

6
ทำให้การค้นหารหัสโดยใช้รหัสข้อความที่ไม่ซ้ำกันทั่วโลก
รูปแบบทั่วไปสำหรับการค้นหาจุดบกพร่องตามสคริปต์นี้: สังเกตความแปลกประหลาดเช่นไม่มีเอาต์พุตหรือโปรแกรมหยุดทำงาน ค้นหาข้อความที่เกี่ยวข้องในบันทึกหรือผลลัพธ์ของโปรแกรมเช่น "ไม่พบ Foo" (ข้อมูลต่อไปนี้เกี่ยวข้องเฉพาะในกรณีที่เป็นเส้นทางที่ใช้ในการค้นหาจุดบกพร่องหากการติดตามสแต็กหรือข้อมูลการดีบักอื่น ๆ พร้อมใช้งานนั่นเป็นอีกเรื่องหนึ่ง) ค้นหารหัสที่ข้อความถูกพิมพ์ ตรวจแก้จุดบกพร่องรหัสระหว่างสถานที่แรกที่ Foo ป้อน (หรือควรป้อน) รูปภาพและที่พิมพ์ข้อความ ขั้นตอนที่สามนั้นเป็นขั้นตอนที่กระบวนการดีบั๊กมักจะหยุดชะงักเนื่องจากมีหลายสถานที่ในรหัสที่พิมพ์ "ไม่พบ Foo" (หรือสตริงเทมเพลตCould not find {name}) ในความเป็นจริงการสะกดผิดหลายครั้งช่วยให้ฉันค้นหาตำแหน่งจริงได้เร็วกว่าที่ฉันคาดไว้ - ทำให้ข้อความที่ไม่ซ้ำกันในทั้งระบบและบ่อยครั้งทั่วโลกส่งผลให้เครื่องมือค้นหาที่เกี่ยวข้องเข้าชมทันที ข้อสรุปที่ชัดเจนจากสิ่งนี้คือเราควรใช้รหัสข้อความที่ไม่ซ้ำกันทั่วโลกในรหัสการเข้ารหัสอย่างหนักเป็นส่วนหนึ่งของสตริงข้อความและอาจตรวจสอบว่ามีการเกิดขึ้นเพียงครั้งเดียวของแต่ละ ID ในฐานรหัส ในแง่ของการบำรุงรักษาชุมชนนี้คิดว่าอะไรคือข้อดีและข้อเสียที่สำคัญที่สุดของวิธีการนี้และคุณจะใช้งานวิธีนี้อย่างไรหรือจะทำให้แน่ใจได้อย่างไรว่าการดำเนินการนั้นไม่จำเป็นเลย (สมมติว่าซอฟต์แวร์

9
คลาสยูทิลิตี้ที่ไม่มีอะไรนอกจากสมาชิกแบบคงที่เป็นรูปแบบการต่อต้านใน C ++ หรือไม่?
คำถามที่ฉันควรใส่ฟังก์ชั่นที่ไม่เกี่ยวข้องกับคลาสได้ก่อให้เกิดการถกเถียงกันว่ามันสมเหตุสมผลหรือไม่ใน C ++ ที่จะรวมฟังก์ชั่นยูทิลิตี้ในชั้นเรียน ฉันมาจากพื้นหลัง C # ที่ไม่มีตัวเลือกหลังและมีแนวโน้มไปสู่การใช้คลาสสแตติกในรหัส C ++ เล็กน้อยที่ฉันเขียน คำตอบที่โหวตมากที่สุดสำหรับคำถามนั้นรวมถึงความคิดเห็นหลาย ๆ อย่างอย่างไรก็ตามบอกว่าควรใช้ฟังก์ชั่นฟรีแม้ว่าการแนะนำคลาสแบบสแตติกนั้นเป็นรูปแบบการต่อต้าน ทำไมเป็นเช่นนั้นใน C ++ อย่างน้อยบนพื้นผิววิธีการคงที่ในชั้นเรียนดูเหมือนจะแยกไม่ออกจากฟังก์ชั่นฟรีใน namespace ทำไมจึงเป็นความพึงพอใจของคนหลัง สิ่งต่าง ๆ จะแตกต่างกันหรือไม่หากการรวบรวมฟังก์ชั่นยูทิลิตี้ต้องการข้อมูลที่ใช้ร่วมกันเช่นแคชที่สามารถเก็บไว้ในเขตข้อมูลส่วนตัวคงที่

10
ความแตกต่างระหว่างสำนวนและรูปแบบการออกแบบ?
อะไรคือความแตกต่างระหว่างสำนวนและรูปแบบการออกแบบ? ดูเหมือนว่าคำศัพท์เหล่านี้ทับซ้อนกันที่ไหนสักแห่ง; ที่ไหนฉันไม่รู้ พวกเขาใช้แทนกันได้หรือไม่ ฉันควรใช้อะไรเมื่อไหร่ นี่คือรายการของ C ++ Idioms ฉันสามารถเรียกพวกเขาว่าลวดลายการออกแบบได้หรือไม่? วิกิพีเดียกำหนด การเขียนโปรแกรมสำนวนเป็นรูปแบบการออกแบบในระดับต่ำ มันหมายความว่าอะไร? อะไร"ระดับต่ำ"หมายถึงที่นี่? คำถามนี้ได้รับแรงบันดาลใจจากคำถามอื่น: https://stackoverflow.com/questions/7343531/are-the-some-design-patterns-language-donian

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

4
ที่ที่เราควรทำการตรวจสอบความถูกต้องสำหรับโมเดลโดเมน
ฉันยังคงมองหาแนวปฏิบัติที่ดีที่สุดสำหรับการตรวจสอบความถูกต้องของแบบจำลองโดเมน เป็นสิ่งที่ดีที่จะนำการตรวจสอบในตัวสร้างของรูปแบบโดเมน? ตัวอย่างการตรวจสอบความถูกต้องของโมเดลโดเมนของฉันมีดังนี้: public class Order { private readonly List<OrderLine> _lineItems; public virtual Customer Customer { get; private set; } public virtual DateTime OrderDate { get; private set; } public virtual decimal OrderTotal { get; private set; } public Order (Customer customer) { if (customer == null) throw new ArgumentException("Customer …

11
คลาสย่อยของตัวสร้างเท่านั้น: นี่เป็นรูปแบบการต่อต้านหรือไม่
ฉันมีการพูดคุยกับเพื่อนร่วมงานและท้ายที่สุดเราก็มีสัญชาติญาณที่ขัดแย้งกันเกี่ยวกับวัตถุประสงค์ของการทำคลาสย่อย สัญชาตญาณของฉันคือถ้าฟังก์ชั่นหลักของคลาสย่อยแสดงค่าที่เป็นไปได้ที่ จำกัด ของพาเรนต์มันก็คงไม่ควรเป็นคลาสย่อย เขาแย้งกับสัญชาตญาณตรงข้ามว่าคลาสย่อยหมายถึงวัตถุที่เป็น "เฉพาะ" มากกว่าดังนั้นความสัมพันธ์คลาสย่อยจึงเหมาะสมกว่า เพื่อให้สัญชาตญาณของฉันเป็นรูปธรรมมากขึ้นฉันคิดว่าถ้าฉันมี subclass ที่ขยายคลาสแม่ แต่รหัสเดียวที่แทนที่ subclass เป็นตัวสร้าง (ใช่ฉันรู้ว่าตัวสร้างไม่ได้โดยทั่วไป "แทนที่", ทนกับฉัน) แล้ว สิ่งที่จำเป็นจริงๆคือวิธีการช่วยเหลือ ตัวอย่างเช่นลองพิจารณาชั้นเรียนชีวิตจริงนี้: public class DataHelperBuilder { public string DatabaseEngine { get; set; } public string ConnectionString { get; set; } public DataHelperBuilder(string databaseEngine, string connectionString) { DatabaseEngine = databaseEngine; ConnectionString = connectionString; } …

9
เมื่อเขียนโค้ดเชิงวัตถุฉันควรทำตามรูปแบบการออกแบบหรือไม่
มีรูปแบบการออกแบบที่เป็นไปได้สำหรับโปรแกรมเชิงวัตถุหรือไม่? ฉันถามนี้เพราะเมื่อเร็ว ๆ นี้ผมเห็นการดำเนินการระดับกับDoor Lockมันเป็นส่วนหนึ่งของการทดสอบและคำตอบบอกว่ารหัสเป็นไปตามรูปแบบวัตถุ Null: class Lock { public: virtual void close() = 0; virtual void open() = 0; virtual bool is_open() const = 0; virtual ~Lock() { } }; class DummyLock : public Lock { private: DummyLock(); DummyLock(const DummyLock&) = delete; DummyLock& operator=(const DummyLock&) = delete; private: void …

11
ตรวจสอบให้แน่ใจว่าแต่ละชั้นเรียนมีเพียงความรับผิดชอบเดียวทำไม?
ตามเอกสารของ Microsoft บทความ Wikipedia SOLID principe หรือสถาปนิกด้านไอทีส่วนใหญ่เราต้องตรวจสอบให้แน่ใจว่าแต่ละชั้นมีหน้าที่รับผิดชอบเพียงอย่างเดียว ฉันอยากจะรู้ว่าทำไมเพราะถ้าทุกคนดูเหมือนจะเห็นด้วยกับกฎนี้ดูเหมือนจะไม่มีใครเห็นด้วยกับเหตุผลของกฎนี้ บางคนกล่าวถึงการบำรุงรักษาที่ดีกว่าบางคนบอกว่าเป็นการทดสอบที่ง่ายหรือทำให้ชั้นเรียนมีความแข็งแกร่งมากขึ้นหรือมีความปลอดภัย อะไรถูกและจริงหมายถึงอะไร ทำไมจึงทำให้การบำรุงรักษาดีขึ้นการทดสอบง่ายขึ้นหรือรหัสมีเสถียรภาพมากขึ้น?

4
ทำไมรูปแบบการฉีดพึ่งพาไม่รวมอยู่ในแก๊งสี่
ทำไมรูปแบบฉีดพึ่งพาไม่ incluided ในแก๊งสี่ ? GOF ทำการทดสอบอัตโนมัติอย่างกว้างขวางล่วงหน้าหรือไม่? ตอนนี้การฉีดแบบพึ่งพานั้นถือเป็นรูปแบบหลักหรือไม่?

11
'C' ใน MVC จำเป็นจริงๆหรือ
ฉันเข้าใจบทบาทของโมเดลและมุมมองในรูปแบบ Model-View-Controller แต่ฉันเข้าใจยากว่าเพราะเหตุใดคอนโทรลเลอร์จึงจำเป็น สมมติว่าเรากำลังสร้างโปรแกรมหมากรุกโดยใช้วิธี MVC สถานะของเกมควรเป็นแบบจำลองและ GUI ควรเป็นมุมมอง อะไรคือคอนโทรลเลอร์ในกรณีนี้? มันเป็นเพียงคลาสแยกต่างหากที่มีฟังก์ชั่นทั้งหมดที่จะถูกเรียกเมื่อคุณพูดคลิกที่ไทล์? ทำไมไม่เพียงทำทุกตรรกะบนตัวแบบในมุมมองของตัวเอง?

6
"Mapper" เป็นรูปแบบการออกแบบที่ถูกต้องหรือเป็นรูปแบบของ "โรงงาน" หรือไม่
รูปแบบทั่วไปที่ฉันเห็นคือสิ่งที่เรียกว่าMapperรูปแบบ (เพื่อไม่ให้สับสนDataMapperซึ่งเป็นอย่างอื่นทั้งหมด) ซึ่งใช้เป็นอาร์กิวเมนต์แหล่งข้อมูล "ดิบ" บางชนิด (เช่น ADO.NET DataReaderหรือDataSet) และแมปเขตข้อมูลไปยัง คุณสมบัติบนวัตถุธุรกิจ / โดเมน ตัวอย่าง: class PersonMapper { public Person Map(DataSet ds) { Person p = new Person(); p.FirstName = ds.Tables[0].Rows[0]["FirstName"].ToString(); // other properties... return p; } } แนวคิดเป็นเกตเวย์ / DAO / Repository / ฯลฯ ของคุณ จะโทรเข้าไปใน Mapper ก่อนที่จะส่งคืนดังนั้นคุณจะได้รับวัตถุทางธุรกิจที่หลากหลายเมื่อเทียบกับที่เก็บข้อมูลพื้นฐาน อย่างไรก็ตามดูเหมือนว่าจะเกี่ยวข้องกันหากไม่เหมือนกันกับแพทเทิร์น Factory (ใน …

9
ฉันจะเอาชนะอัมพาตโดยการวิเคราะห์ได้อย่างไรเมื่อเขียนโค้ด?
เมื่อฉันเริ่มโครงการใหม่ฉันมักจะเริ่มคิดเกี่ยวกับรายละเอียดของการดำเนินการทันที "ฉันจะวาง DataBaseHandler ไว้ที่ไหนฉันควรใช้มันอย่างไรคลาสที่ต้องการใช้มันขยายจาก Abstractclass superclass บางส่วน .. ฉันควรใช้อินเทอร์เฟซหรือไม่ฉันจะใช้อินเทอร์เฟซในระดับใด วิธีในการส่งคำขอและการแยกวิเคราะห์ข้อมูล " ฉันสิ้นสุดการถ่วงเวลานานเพราะฉันต้องการรหัสสำหรับความสามารถในการขยายและการนำกลับมาใช้ใหม่ แต่ฉันรู้สึกว่าแทบจะเป็นไปไม่ได้เลยที่จะคิดถึงอดีตเกี่ยวกับวิธีการนำไปใช้อย่างสมบูรณ์ แล้วถ้าฉันพยายามจะพูดว่า "ขันมันให้เสร็จแล้ว!" ฉันก็ชนกำแพงอิฐอย่างรวดเร็วเพราะรหัสของฉันไม่ได้จัดระเบียบฉันผสมระดับนามธรรมต่าง ๆ เป็นต้น คุณมีเทคนิค / วิธีการอะไรบ้างในการเปิดตัวโครงการใหม่ในขณะที่ตั้งค่าโครงสร้างแบบลอจิคัล / แบบแยกส่วนที่จะขยายได้ดี - -แก้ไข - - นี่เป็นประเภทของคำถามที่ตอบรับยากแล้ว แต่ต้องการได้รับคำติชมเพิ่มเติมดูว่ามีฉันทามติบ้างไหม TDD ฟังดูเจ๋งจริงๆและตรงไปตรงมาฉันหมายถึงการเพิ่มความเร็วในการใช้ JUnit ฯลฯ ในเวลาเดียวกันแฟน ๆ ของ TDD คิดอย่างไรเกี่ยวกับความจริงที่ว่าจุดที่ถูกต้องตามกฎหมายที่เกี่ยวข้องกับการแก้ไข TDD ของฉัน ปัญหาเฉพาะคือ TDD ไม่ได้ตอบคำถามการออกแบบ แน่นอนว่าฉันเห็นด้วยกับ TDD จะช่วยฉันกำหนดสิ่งที่ฉันต้องการจะทำและจากนั้นฉันสามารถค่อยๆทำตามวิธีได้ แต่มีรูปแบบ / โครงสร้างการออกแบบโดยรวมที่แตกต่างกันมากมายที่ทุกคนสามารถผ่านการทดสอบหน่วยได้ นั่นเป็นเพียงแค่มันทดสอบหน่วยเดียว …

6
จะหลีกเลี่ยง UITableViewController ขนาดใหญ่และเงอะงะบน iOS ได้อย่างไร
ฉันมีปัญหาเมื่อใช้รูปแบบ MVC บน iOS ฉันค้นหาทางอินเทอร์เน็ต แต่ดูเหมือนจะไม่พบทางออกที่ดีสำหรับปัญหานี้ UITableViewControllerการใช้งานหลายอย่างดูเหมือนจะค่อนข้างใหญ่ ตัวอย่างส่วนใหญ่ที่ฉันได้เห็นช่วยให้UITableViewControllerการดำเนินการและ<UITableViewDelegate> <UITableViewDataSource>การติดตั้งใช้งานเหล่านี้เป็นเหตุผลสำคัญว่าทำไมจึงUITableViewControllerเริ่มมีขนาดใหญ่ ทางออกหนึ่งที่จะสร้างการเรียนที่แยกต่างหากที่ดำเนินการและ<UITableViewDelegate> ของหลักสูตรการเรียนเหล่านี้จะต้องมีการอ้างอิงถึง<UITableViewDataSource> UITableViewControllerมีข้อเสียใด ๆ ในการใช้โซลูชันนี้หรือไม่? โดยทั่วไปฉันคิดว่าคุณควรมอบสิทธิ์การใช้งานให้กับชั้นเรียนอื่น ๆ "ผู้ช่วย" หรืออื่น ๆ ที่คล้ายกันโดยใช้รูปแบบตัวแทน มีวิธีใดในการแก้ปัญหานี้เป็นที่ยอมรับหรือไม่? ฉันไม่ต้องการให้แบบจำลองมีฟังก์ชั่นมากเกินไปหรือมุมมอง ฉันเชื่อว่าตรรกะควรอยู่ในคลาสตัวควบคุมเนื่องจากนี่เป็นหนึ่งในเสาหลักของรูปแบบ MVC แต่คำถามใหญ่คือ: คุณควรแบ่งตัวควบคุมของการใช้ MVC เป็นชิ้นส่วนที่จัดการได้อย่างไร (ใช้กับ MVC ใน iOS ในกรณีนี้) อาจมีรูปแบบทั่วไปสำหรับการแก้ปัญหานี้แม้ว่าฉันกำลังมองหาโซลูชันสำหรับ iOS โดยเฉพาะ โปรดยกตัวอย่างรูปแบบที่ดีสำหรับการแก้ไขปัญหานี้ โปรดระบุเหตุผลที่โซลูชันของคุณยอดเยี่ยม

8
OOP ง่ายขึ้นหรือยากขึ้นหรือไม่ [ปิด]
เมื่อแนวคิดของการเขียนโปรแกรมเชิงวัตถุได้รับการแนะนำให้รู้จักกับโปรแกรมเมอร์เมื่อหลายปีก่อนมันดูน่าสนใจและการเขียนโปรแกรมก็สะอาดขึ้น OOP เป็นเช่นนี้ Stock stock = new Stock(); stock.addItem(item); stock.removeItem(item); นั่นง่ายกว่าที่จะเข้าใจด้วยชื่อที่อธิบายตนเอง แต่ตอนนี้ OOP ที่มีรูปแบบเช่น Data Transfer Objects, Value Objects, Repository, Dependency Injection เป็นต้นนั้นมีความซับซ้อนมากขึ้น เพื่อให้บรรลุถึงข้างต้นคุณอาจต้องสร้างหลายคลาส (เช่น abstract, factory, DAO เป็นต้น) และใช้อินเทอร์เฟซหลายตัว หมายเหตุ: ฉันไม่ขัดกับแนวปฏิบัติที่ดีที่สุดที่ทำให้การทำงานร่วมกันการทดสอบและการรวมระบบง่ายขึ้น

4
ความสำคัญของรูปแบบการออกแบบด้วย Javascript, NodeJs และคณะ
ด้วย Javascript ที่ดูเหมือนจะเป็นภาษาการเขียนโปรแกรมที่แพร่หลายของเว็บในอีกไม่กี่ปีข้างหน้าเฟรมเวิร์กใหม่ที่โผล่ขึ้นมาทุก ๆ ห้านาทีและการเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์ทำให้ทั้งเซิร์ฟเวอร์และไคลเอนต์: คุณในฐานะนักพัฒนา Javascript พิจารณารูปแบบการออกแบบดั้งเดิมว่ามีความสำคัญหรือมีความสำคัญน้อยกว่าที่เคยใช้กับภาษา / สภาพแวดล้อมอื่น ๆ หรือไม่? โปรดตั้งชื่อรูปแบบการออกแบบสามอันดับแรกที่คุณเป็นผู้พัฒนา Javascript ใช้เป็นประจำและให้ตัวอย่างว่าพวกเขาช่วยในการพัฒนา Javascript ของคุณอย่างไร

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