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

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

12
ตามแนวคิดแล้วการเล่นซ้ำในเกมเป็นอย่างไร
ฉันมีความอยากรู้อยากเห็นเกี่ยวกับวิธีการเล่นซ้ำในเกม ตอนแรกฉันคิดว่าจะมีเพียงรายการคำสั่งของผู้เล่นทุกคน / การกระทำของ AI ที่ใช้ในเกมและจากนั้นจะเล่นเกมอีกครั้งและให้เครื่องยนต์แสดงผลตามปกติ แต่ผมได้มองไปที่ไกลใน FPS / RTS เกมและเมื่อตรวจสอบอย่างระมัดระวังแม้กระทั่งสิ่งที่ต้องการอนุภาคและกราฟิก / บกพร่องเสียงมีความสอดคล้องกัน (และบกพร่องเหล่านั้นมักจะมีในที่สอดคล้องกัน) ดังนั้นสิ่งนี้จะเกิดขึ้นได้อย่างไร ในเกมที่มีมุมกล้องคงที่ฉันคิดว่ามันอาจจะแค่เขียนทุกเฟรมของฉากทั้งหมดไปยังสตรีมที่จัดเก็บไว้และจากนั้นก็ทำการรีสตรีมกลับมา แต่มันดูไม่พอสำหรับเกมที่อนุญาตให้คุณหยุดและย้ายกล้อง รอบ คุณต้องจัดเก็บตำแหน่งของทุกสิ่งในที่เกิดเหตุ ณ เวลาใด ๆ (ไม่?) ดังนั้นสำหรับสิ่งต่าง ๆ เช่นอนุภาคนั่นคือข้อมูลจำนวนมากที่จะผลักดันซึ่งดูเหมือนจะดึงดูดความสนใจอย่างมากต่อประสิทธิภาพของเกมขณะเล่น

8
วิธีที่ดีที่สุดในการสร้างระบบปลั๊กอินด้วย Java
คุณจะใช้ระบบปลั๊กอินสำหรับแอปพลิเคชัน Java ของคุณอย่างไร? เป็นไปได้หรือไม่ที่จะมีระบบที่ใช้งานง่าย (สำหรับผู้พัฒนา) ซึ่งประสบความสำเร็จดังต่อไปนี้: ผู้ใช้ใส่ปลั๊กอินลงในไดเรกทอรีย่อยของแอพ ปลั๊กอินสามารถให้หน้าจอการกำหนดค่า หากคุณใช้กรอบงานสิทธิ์ใช้งานร่วมกันได้กับการพัฒนาเชิงพาณิชย์หรือไม่?

6
การใช้งานเธรดรูปแบบซิงเกิลของ Meyers ปลอดภัยหรือไม่
การใช้งานต่อไปนี้โดยใช้การเริ่มต้นขี้เกียจของSingletonเธรด (Meyers 'Singleton) ปลอดภัยหรือไม่ static Singleton& instance() { static Singleton s; return s; } ถ้าไม่ทำไมและวิธีที่จะทำให้มันปลอดภัยไหม?

4
MVC (Laravel) ที่จะเพิ่มตรรกะ
สมมติว่าเมื่อใดก็ตามที่ฉันดำเนินการ CRUD หรือแก้ไขความสัมพันธ์ในลักษณะเฉพาะฉันก็ต้องการทำอย่างอื่นด้วย เช่นเมื่อใดก็ตามที่มีคนเผยแพร่โพสต์ฉันก็ต้องการบันทึกบางสิ่งลงในตารางเพื่อการวิเคราะห์ อาจไม่ใช่ตัวอย่างที่ดีที่สุด แต่โดยทั่วไปมีฟังก์ชัน "จัดกลุ่ม" จำนวนมากนี้ ปกติฉันจะเห็นตรรกะประเภทนี้ใส่ไว้ในคอนโทรลเลอร์ ทั้งหมดนี้เป็นสิ่งที่ดีจนคุณต้องการสร้างฟังก์ชันนี้ซ้ำในหลาย ๆ ที่ เมื่อคุณเริ่มเข้าสู่บางส่วนการสร้าง API และสร้างเนื้อหาจำลองจะกลายเป็นปัญหาในการทำให้สิ่งต่างๆแห้ง วิธีที่ฉันเห็นในการจัดการสิ่งนี้ ได้แก่ เหตุการณ์ที่เก็บไลบรารีและการเพิ่มลงในโมเดล นี่คือความเข้าใจของฉันเกี่ยวกับแต่ละข้อ: บริการ:นี่คือที่ที่คนส่วนใหญ่อาจจะใส่รหัสนี้ ปัญหาหลักของฉันเกี่ยวกับบริการคือบางครั้งมันก็ยากที่จะพบฟังก์ชันเฉพาะในนั้นและฉันรู้สึกว่าพวกเขาลืมไปว่าเมื่อใดที่ผู้คนให้ความสำคัญกับการใช้ Eloquent ฉันจะรู้ว่าฉันต้องเรียกวิธีการpublishPost()ในห้องสมุดเมื่อฉันก็สามารถทำ$post->is_published = 1? เงื่อนไขเดียวที่ฉันเห็นว่าใช้งานได้ดีคือถ้าคุณใช้บริการเท่านั้น (และเป็นการดีที่จะทำให้ Eloquent ไม่สามารถเข้าถึงได้จากคอนโทรลเลอร์ทั้งหมดด้วยกัน) ในที่สุดดูเหมือนว่านี่จะเป็นการสร้างไฟล์ที่ไม่จำเป็นจำนวนมากหากโดยทั่วไปคำขอของคุณเป็นไปตามโครงสร้างแบบจำลองของคุณ ที่เก็บ:จากสิ่งที่ฉันเข้าใจว่านี่เป็นเหมือนบริการ แต่มีอินเทอร์เฟซเพื่อให้คุณสามารถสลับไปมาระหว่าง ORM ซึ่งฉันไม่ต้องการ เหตุการณ์:ฉันเห็นว่านี่เป็นระบบที่สง่างามที่สุดในแง่หนึ่งเพราะคุณรู้ว่าเหตุการณ์แบบจำลองของคุณมักจะถูกเรียกใช้วิธีการ Eloquent ดังนั้นคุณจึงสามารถเขียนคอนโทรลเลอร์ของคุณได้ตามปกติ ฉันเห็นว่าสิ่งเหล่านี้ยุ่งเหยิงและถ้าใครมีตัวอย่างของโครงการขนาดใหญ่ที่ใช้เหตุการณ์สำหรับการมีเพศสัมพันธ์ที่สำคัญฉันก็อยากดู โมเดล:ตามเนื้อผ้าฉันมีคลาสที่ทำ CRUD และจัดการการมีเพศสัมพันธ์ที่สำคัญด้วย สิ่งนี้ทำให้ง่ายขึ้นจริง ๆ เพราะคุณรู้ฟังก์ชันการทำงานทั้งหมดรอบ ๆ CRUD + สิ่งที่ต้องทำก็อยู่ที่นั่น เรียบง่าย แต่ในสถาปัตยกรรม …

14
มีวิธีที่สง่างามที่จะทำให้ทุกวิธีในชั้นเรียนเริ่มต้นด้วยรหัสบล็อกหนึ่ง ๆ หรือไม่?
ฉันมีชั้นเรียนที่ทุกวิธีเริ่มต้นด้วยวิธีเดียวกัน: class Foo { public void bar() { if (!fooIsEnabled) return; //... } public void baz() { if (!fooIsEnabled) return; //... } public void bat() { if (!fooIsEnabled) return; //... } } มีวิธีที่ดีที่จะต้องการ (และหวังว่าจะไม่เขียนในแต่ละครั้ง) fooIsEnabledส่วนหนึ่งสำหรับวิธีการสาธารณะในชั้นเรียนหรือไม่?

10
รูปแบบการออกแบบ: บทคัดย่อจากโรงงานเทียบกับวิธีการของโรงงาน
หมายเหตุ: คำถามอยู่ท้ายของโพสต์ ฉันได้อ่านกระทู้ StackOverflow อื่น ๆ เกี่ยวกับโรงงานบทคัดย่อ VS โรงงานวิธี ฉันเข้าใจเจตนาของแต่ละรูปแบบ อย่างไรก็ตามฉันไม่ชัดเจนในคำจำกัดความ วิธีการจากโรงงานกำหนดอินเทอร์เฟซสำหรับการสร้างวัตถุ แต่ให้คลาสย่อยตัดสินใจว่าจะสร้างอินสแตนซ์ใด เมธอดจากโรงงานอนุญาตให้คลาสเลื่อนการอินสแตนซ์ไปที่คลาสย่อย ในทางตรงกันข้ามโรงงานนามธรรมให้อินเทอร์เฟซสำหรับการสร้างครอบครัวของวัตถุที่เกี่ยวข้องหรือขึ้นอยู่กับโดยไม่ต้องระบุคลาสที่เป็นรูปธรรมของพวกเขา - John Feminella โรงงานบทคัดย่อมีลักษณะคล้ายกันมากกับโรงงานวิธี ฉันวาดคลาส UML สองสามเพื่อแสดงจุดของฉัน บันทึก: แผนภาพนี้มาจากwww.yuml.comดังนั้นจึงไม่ได้เน้นอย่างสมบูรณ์แบบ แต่มันเป็นบริการฟรี :) ไดอะแกรมอาจไม่สมบูรณ์แบบ ฉันยังคงเรียนรู้รูปแบบการออกแบบของGoF วิธีการโรงงาน: Abstract Factory (เฉพาะสมาชิก 1 คน): บทคัดย่อจากโรงงาน (มีสมาชิกเพิ่ม): คำถาม: หากAbstract Factoryมีผู้สร้างเพียงคนเดียวและหนึ่งผลิตภัณฑ์มันยังคงเป็นรูปแบบAbstract Factoryหรือไม่ (อินเทอร์เฟซสำหรับสร้าง familes) สามารถโรงงานวิธีสร้างคอนกรีตถูกสร้างขึ้นจากการเชื่อมต่อหรือไม่ก็จะต้องมีการออกจากชั้นเรียน? (คลาสเลื่อนการอินสแตนซ์ไปที่คลาสย่อย) หากโรงงานนามธรรมสามารถมีผู้สร้างเพียงคนเดียวและหนึ่งผลิตภัณฑ์ความแตกต่างเพียงอย่างเดียวระหว่างโรงงานนามธรรมและวิธีการโรงงานที่ผู้สร้างสำหรับอดีตคืออินเทอร์เฟซและผู้สร้างสำหรับหลังเป็นระดับหรือไม่

7
ServiceLocator เป็นการต่อต้านรูปแบบหรือไม่?
เมื่อเร็ว ๆ นี้ฉันได้อ่านบทความของ Mark Seemannเกี่ยวกับรูปแบบการต่อต้าน Service Locator ผู้เขียนชี้ให้เห็นเหตุผลหลักสองประการที่ว่าทำไม ServiceLocator จึงต่อต้านรูปแบบ: ปัญหาการใช้งาน API (ซึ่งฉันก็สบายดี) เมื่อคลาสใช้ตัวระบุตำแหน่งบริการมันยากมากที่จะเห็นการอ้างอิงเนื่องจากในกรณีส่วนใหญ่คลาสจะมีตัวสร้าง PARAMETERLESS เพียงตัวเดียว ในทางตรงกันข้ามกับ ServiceLocator วิธี DI เปิดเผยการอ้างอิงอย่างชัดเจนผ่านพารามิเตอร์ของตัวสร้างเพื่อให้เห็นการอ้างอิงได้ง่ายใน IntelliSense ปัญหาการบำรุงรักษา (ซึ่งทำให้ฉันงง) พิจารณาตัวอย่างต่อไปนี้ เรามีคลาส'MyType'ซึ่งใช้วิธีการระบุตำแหน่งบริการ: public class MyType { public void MyMethod() { var dep1 = Locator.Resolve<IDep1>(); dep1.DoSomething(); } } ตอนนี้เราต้องการเพิ่มการอ้างอิงอื่นให้กับคลาส 'MyType' public class MyType { public void MyMethod() …

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

6
เป็นไปได้ไหมที่จะสร้างคลาสสแตติกใน PHP (เช่นใน C #)
ฉันต้องการสร้างคลาสแบบคงที่ใน PHP และให้มันทำงานเหมือนใน C # ดังนั้น ตัวสร้างจะถูกเรียกโดยอัตโนมัติในการโทรครั้งแรกไปที่ชั้นเรียน ไม่ต้องใช้การเริ่มต้น อะไรทำนองนี้ ... static class Hello { private static $greeting = 'Hello'; private __construct() { $greeting .= ' There!'; } public static greet(){ echo $greeting; } } Hello::greet(); // Hello There!

11
มีกรณีการใช้งานสำหรับ singletons ด้วยการเข้าถึงฐานข้อมูลใน PHP?
ฉันเข้าถึงฐานข้อมูล MySQL ของฉันผ่าน PDO ฉันตั้งค่าการเข้าถึงฐานข้อมูลและความพยายามครั้งแรกของฉันคือการใช้สิ่งต่อไปนี้: สิ่งแรกที่ผมคิดว่ามีที่global: $db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'root', 'pwd'); function some_function() { global $db; $db->query('...'); } นี่ถือว่าเป็นการปฏิบัติที่ไม่ดี หลังจากค้นหาเพียงเล็กน้อยฉันก็จบลงด้วยรูปแบบซิงเกิลซึ่ง "ใช้กับสถานการณ์ที่จำเป็นต้องมีอินสแตนซ์เดียวของคลาส" ตามตัวอย่างในคู่มือเราควรทำสิ่งนี้: class Database { private static $instance, $db; private function __construct(){} static function singleton() { if(!isset(self::$instance)) self::$instance = new __CLASS__; return self:$instance; } function get() { if(!isset(self::$db)) self::$db …

11
รูปแบบการสร้างใน Java ที่มีประสิทธิภาพ
ฉันเพิ่งเริ่มอ่าน Java ที่มีประสิทธิภาพโดย Joshua Bloch ฉันพบแนวคิดของรูปแบบของตัวสร้าง [รายการ 2 ในหนังสือ] ที่น่าสนใจจริงๆ ฉันพยายามใช้มันในโครงการของฉัน แต่มีข้อผิดพลาดในการรวบรวม ต่อไปนี้เป็นสิ่งสำคัญที่ฉันพยายามทำ: คลาสที่มีหลายแอ็ตทริบิวต์และคลาสตัวสร้าง: public class NutritionalFacts { private int sodium; private int fat; private int carbo; public class Builder { private int sodium; private int fat; private int carbo; public Builder(int s) { this.sodium = s; } public Builder …

2
ความแตกต่างระหว่างรูปแบบการออกแบบ Facade, Proxy, Adapter และ Decorator? [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ รูปแบบการออกแบบ Facade, Proxy, Adapter และ Decorator แตกต่างกันอย่างไร ฉันไม่เคยอ่านคำอธิบายที่ชัดเจนว่าของคุณคืออะไร?

3
รูปแบบการออกแบบของผู้สังเกตการณ์กับ“ ผู้ฟัง”
สำหรับฉันแล้วรูปแบบการออกแบบของ Observer ดังที่อธิบายไว้ใน GOF นั้นเป็นสิ่งเดียวกับที่ฟังในชุดเครื่องมือต่างๆ มีความแตกต่างระหว่างแนวคิดหรือเป็น Listeners และ Observers จริงๆในสิ่งเดียวกัน (ฉันไม่ได้มองหาการใช้ภาษาคอมพิวเตอร์เฉพาะเจาะจงฉันแค่ต้องการเข้าใจความแตกต่าง (ถ้ามี) จากมุมมองของการออกแบบใช่ฉันรู้ว่ามีคำตอบมากมายสำหรับคำถามที่คล้ายกันใน SOF แต่พวกเขาหยั่งราก ในคำถามเฉพาะเกี่ยวกับภาษาเฉพาะ - ฉันกำลังมองหาคำตอบการออกแบบไม่ใช่คำตอบภาษา)

8
ความแตกต่างระหว่างพร็อกซีและรูปแบบมัณฑนากร
คุณสามารถให้คำอธิบายที่ดีใด ๆ สิ่งที่เป็นความแตกต่างระหว่างพร็อกซีและมัณฑนากร ? ความแตกต่างหลัก ๆ ที่ฉันเห็นคือเมื่อเราสมมติว่าProxyใช้องค์ประกอบและDecoratorใช้การรวมแล้วดูเหมือนว่าจะชัดเจนว่าโดยการใช้Decoratorsหลาย (หนึ่งหรือมากกว่า) คุณสามารถปรับเปลี่ยน / เพิ่มฟังก์ชันการทำงานเพื่ออินสแตนซ์ที่มีอยู่ก่อนพร็อกซีมีอินสแตนซ์ภายในของคลาสพร็อกซีและผู้รับมอบสิทธิ์เพิ่มคุณสมบัติเพิ่มเติม (ลักษณะการทำงานของพร็อกซี) คำถามคือ - พร็อกซีที่สร้างด้วยการรวมยังเป็นพร็อกซีหรือมากกว่ามัณฑนากรหรือไม่ อนุญาต (ตามคำจำกัดความในรูปแบบ GoF) เพื่อสร้างพร็อกซีที่มีการรวมหรือไม่

10
ฐานข้อมูลค่าแอตทริบิวต์เอนทิตีเทียบกับอีคอมเมิร์ซแบบจำลองเชิงสัมพันธ์ที่เข้มงวด
มีความปลอดภัยที่จะกล่าวว่าโมเดลฐานข้อมูลEAV / CRนั้นไม่ดี ที่กล่าวว่า คำถาม: ควรใช้โมเดลฐานข้อมูลเทคนิคหรือรูปแบบใดในการจัดการกับ "คลาส" ของแอตทริบิวต์ที่อธิบายผลิตภัณฑ์อีคอมเมิร์ซซึ่งสามารถเปลี่ยนแปลงได้ในขณะดำเนินการ ในฐานข้อมูลอีคอมเมิร์ซที่ดีคุณจะจัดเก็บคลาสของตัวเลือกต่างๆ (เช่นความละเอียดของทีวีจะมีความละเอียดสำหรับทีวีแต่ละเครื่อง แต่ผลิตภัณฑ์ถัดไปอาจไม่ใช่ทีวีและไม่มี "ความละเอียดของทีวี") คุณจัดเก็บค้นหาอย่างมีประสิทธิภาพและอนุญาตให้ผู้ใช้ของคุณตั้งค่าประเภทผลิตภัณฑ์ด้วยช่องตัวแปรที่อธิบายผลิตภัณฑ์ของตนได้อย่างไร หากเครื่องมือค้นหาพบว่าลูกค้ามักค้นหาทีวีตามความลึกของคอนโซลคุณสามารถเพิ่มความลึกของคอนโซลลงในช่องของคุณจากนั้นเพิ่มความลึกเดียวสำหรับผลิตภัณฑ์ทีวีแต่ละประเภทในขณะทำงาน มีคุณลักษณะทั่วไปที่ดีในแอปอีคอมเมิร์ซที่แสดงชุดผลิตภัณฑ์จากนั้นมีเมนูด้านข้าง "เจาะลึก" ซึ่งคุณจะเห็น "ความละเอียดของทีวี" เป็นส่วนหัวและความละเอียดทีวีที่พบมากที่สุด 5 อันดับแรกสำหรับ พบชุด คุณคลิกรายการใดรายการหนึ่งและจะแสดงเฉพาะทีวีที่มีความละเอียดดังกล่าวช่วยให้คุณสามารถดูรายละเอียดเพิ่มเติมโดยเลือกหมวดหมู่อื่น ๆ ในเมนูด้านข้าง ตัวเลือกเหล่านี้จะเป็นแอตทริบิวต์ผลิตภัณฑ์แบบไดนามิกที่เพิ่มในขณะทำงาน การอภิปรายเพิ่มเติม: เรื่องสั้นสั้น ๆมีลิงก์ในอินเทอร์เน็ตหรือคำอธิบายแบบจำลองที่สามารถ "แก้ไข" ในเชิงวิชาการ "ในการตั้งค่าต่อไปนี้ได้หรือไม่ ฉันขอขอบคุณ Noel Kennedy ที่แนะนำตารางหมวดหมู่ แต่ความต้องการอาจมากกว่านั้น ฉันอธิบายวิธีอื่นด้านล่างโดยพยายามเน้นความสำคัญ ฉันอาจต้องการการแก้ไขมุมมองเพื่อแก้ปัญหาหรืออาจต้องเจาะลึกลงไปใน EAV / CR ชอบการตอบสนองเชิงบวกต่อรุ่น EAV / CR เพื่อนนักพัฒนาของฉันทุกคนพูดในสิ่งที่เจฟฟรีย์เคมป์สัมผัสด้านล่าง: "เอนทิตีใหม่ต้องได้รับการจำลองและออกแบบโดยมืออาชีพ" (นำออกจากบริบทอ่านคำตอบของเขาด้านล่าง) ปัญหาคือ: …

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