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

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

5
อินเตอร์เฟซแยกต่างหากสำหรับวิธีการกลายพันธุ์
ฉันทำงานเกี่ยวกับการรีแฟคเตอร์โค้ดบางส่วนและฉันคิดว่าฉันอาจทำขั้นตอนแรกลงไปในช่องกระต่าย ฉันเขียนตัวอย่างใน Java แต่ฉันคิดว่ามันอาจเป็นผู้ไม่เชื่อเรื่องพระเจ้า ฉันมีอินเตอร์เฟซที่Fooกำหนดเป็น public interface Foo { int getX(); int getY(); int getZ(); } และการดำเนินการตาม public final class DefaultFoo implements Foo { public DefaultFoo(int x, int y, int z) { this.x = x; this.y = y; this.z = z; } public int getX() { return x; } public …

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

1
MVC + 3 ชั้น ที่ ViewModels เข้ามาเล่น?
ฉันออกแบบแอพพลิเคชั่น 3 ชั้นโดยใช้ ASP.NET MVC 4 ฉันใช้ทรัพยากรต่อไปนี้เป็นข้อมูลอ้างอิง CodeProject: MVC + N-tier + Entity Framework แยกการเข้าถึงข้อมูลใน ASP.NET MVC ฉันมีดีไซน์ดังต่อไปนี้ Presentation Layer (PL) (โครงการ MVC หลักที่MของMVCถูกย้ายไปยัง Data Access Layer): MyProjectName.Main Views/ Controllers/ ... ชั้นตรรกะทางธุรกิจ (BLL) : MyProjectName.BLL ViewModels/ ProjectServices/ ... ชั้นการเข้าถึงข้อมูล (DAL) : MyProjectName.DAL Models/ Repositories.EF/ Repositories.Dapper/ ... ตอนนี้ PL อ้างอิง BLL …

2
.Net ผู้พัฒนาพยายามเรียนรู้ทับทิมบนราง
ฉันเป็นนักพัฒนา. NET และฉันมีโอกาสได้เล่นกับ Ruby on Rails ในสุดสัปดาห์นี้ ใน. NET เราแยกเลเยอร์ของแอปพลิเคชันโดยการสร้างโครงการไลบรารีคลาสแยกต่างหาก จากมุมมองรูปแบบการออกแบบเราต้องทำเช่นนั้นใน Rails ด้วยหรือเป็นเพียงโครงการเดียวที่มีทุกอย่างในนั้นหรือไม่

4
การออกแบบรูปแบบคำสั่ง
ฉันมีการใช้รูปแบบคำสั่งเก่านี้ เป็นการผ่านบริบทผ่านการใช้งานDIOperationทั้งหมดแต่ฉันรู้ในภายหลังในกระบวนการเรียนรู้และการเรียนรู้ (ที่ไม่เคยหยุดนิ่ง) นั่นไม่เหมาะสม ฉันยังคิดว่า "การเยี่ยมชม" ที่นี่ไม่เหมาะและสับสนจริงๆ จริง ๆ แล้วฉันกำลังคิดที่จะเปลี่ยนรหัสของฉันอีกครั้งเนื่องจากคำสั่งไม่ควรรู้อะไรเกี่ยวกับผู้อื่นและในขณะนี้พวกเขาทั้งหมดใช้คู่ค่าคีย์เดียวกัน มันยากที่จะรักษาคลาสที่เป็นเจ้าของคีย์ - ค่าซึ่งบางครั้งนำไปสู่ตัวแปรที่ซ้ำกัน ตัวอย่างกรณีการใช้งานสมมติว่าCommandBต้องการชื่อผู้ใช้ที่CommandAกำหนดไว้ CommandA ควรตั้งค่าUserNameForCommandB = Johnหรือไม่ หรือพวกเขาควรแบ่งปันชื่อผู้ใช้ทั่วไป= John key-value หรือไม่ จะเกิดอะไรขึ้นหากชื่อผู้ใช้ถูกใช้โดยคำสั่งที่สาม ฉันจะปรับปรุงการออกแบบนี้ได้อย่างไร ขอบคุณ! class DIParameters { public: /** * Parameter setter. */ virtual void setParameter(std::string key, std::string value) = 0; /** * Parameter getter. */ virtual std::string getParameter(std::string …

2
POST / Redirect / GET ด้วยการส่งแบบฟอร์มที่ไม่ถูกต้อง?
ในด้านการพัฒนาเว็บคุณควรทำPOST / Redirect / GET หรือไม่เมื่อเขตข้อมูลในการส่งแบบฟอร์มไม่ถูกต้องเช่นกัน? โดยทั่วไปแล้วจะไม่มีธุรกรรมที่ละเอียดอ่อนเกิดขึ้นในเหตุการณ์นี้ อย่างไรก็ตามการโต้แย้งสามารถทำเช่นนั้นได้ยังคงเป็นวิธีที่ดีในการใช้รูปแบบ POST / Redirect / GET?

3
เมื่อใดที่ Efferent / Afferent coupling ดีหรือไม่ดี
ฉันมีการสอบรูปแบบซอฟต์แวร์ในสัปดาห์นี้และหนึ่งในหัวข้อที่เราต้องศึกษาคือการมีเพศสัมพันธ์แบบ Efferent และ Afferent ฉันเข้าใจแพคเกจที่มี Ce สูง (ข้อต่อที่มีประสิทธิภาพ) ถ้ามันขึ้นอยู่กับประเภทอื่น ๆ ตัวอย่างเช่น: class Car{ Engine engine; Wheel wheel; Body body; } คลาสนี้จะมีคัปปลิ้งที่มีประสิทธิภาพสูงขึ้นอยู่กับประเภทเครื่องยนต์ล้อและตัวถัง ในขณะที่ประเภท "ล้อ" จะมี Ca สูง (การเชื่อมต่อแบบ afferent) ถ้ามีแพ็คเกจอื่น ๆ หลายอย่างขึ้นอยู่กับมัน (รถยนต์, เครื่องบิน, จักรยาน) หนึ่งในคำถามที่เป็นไปได้ในการสอบของเราคือเมื่อใดที่เอฟเฟนท์ / เอฟเฟอเรนท์มีเพศสัมพันธ์ดีหรือไม่ดี? สิ่งนี้ดูแปลกสำหรับฉันเพราะเหตุผลโปรแกรมจะต้องมีแพ็คเกจ / คลาสที่มีทั้งคู่ Efferent / Afferent สูง ไม่มีใครมีตัวอย่างของเมื่อ / ที่สูงออกหรือมีเพศสัมพันธ์ afferent ดี / …

5
css - ใช้ universal '*' selector vs. html หรือ body selector?
การใช้สไตล์กับแท็ก body จะถูกนำไปใช้กับทั้งหน้าดังนั้น body { font-family: Verdana } จะถูกนำไปใช้กับทั้งหน้า สิ่งนี้สามารถทำได้ด้วย * {font-family: Verdana} ซึ่งจะนำไปใช้กับองค์ประกอบทั้งหมดและดังนั้นดูเหมือนว่าจะมีผลเช่นเดียวกัน ฉันเข้าใจหลักการที่ว่าในตัวอย่างแรกสไตล์จะถูกนำไปใช้กับแท็กหนึ่งส่วนเนื้อหาสำหรับทั้งหน้าในขณะที่ในตัวอย่างที่สองมีการใช้แบบอักษรกับองค์ประกอบ HTML แต่ละรายการ สิ่งที่ฉันถามคืออะไรคือความแตกต่างในทางปฏิบัติในการทำสิ่งที่เป็นนัยและอะไรคือเหตุผลสถานการณ์หรือแนวปฏิบัติที่ดีที่สุดที่นำไปสู่การใช้ซึ่งกันและกัน ผลข้างเคียงคือความเร็วอย่างแน่นอน (+1 Rob) ฉันสนใจเหตุผลที่แท้จริงที่สุดในการเลือกหนึ่งอย่างในแง่ของการใช้งาน

8
เหตุใดจึงไม่เพิ่มรูปแบบการออกแบบในการสร้างภาษา
เมื่อเร็ว ๆ นี้ฉันได้พูดคุยกับเพื่อนร่วมงานที่กล่าวว่า บริษัท ของเขากำลังทำงานเพื่อเพิ่มรูปแบบการออกแบบ MVC เป็นส่วนขยาย PHP เขาอธิบายว่าพวกเขาเขียนรหัส C เพื่อเพิ่มControllers, Models and Viewsโครงสร้างภาษาเพื่อเพิ่มประสิทธิภาพ ตอนนี้ฉันรู้แล้วว่า MVC เป็นรูปแบบการออกแบบสถาปัตยกรรมที่ใช้กันอย่างแพร่หลายในเว็บแอปพลิเคชัน แต่ฉันยังต้องเจอภาษาที่มีโครงสร้างภาษาสำหรับตัวควบคุม IMHO การรวมรูปแบบการออกแบบเป็นภาษาสามารถเน้นความสำคัญของการออกแบบ OO ที่ดี ดังนั้นทำไมรูปแบบการออกแบบที่ไม่ได้ใช้มากที่สุด (MVC, Factory, Strategy, ... ฯลฯ ) เพิ่มลงในโครงสร้างภาษา หากคำถามฟังดูกว้างเกินไปคุณอาจ จำกัด คำถามไว้ที่ PHP เท่านั้น แก้ไข: ฉันไม่ได้หมายความว่าต้องใช้รูปแบบการออกแบบเมื่อพัฒนาโครงการ จริงๆแล้วฉันส่งเสริมวิธีการในการทำให้มันง่ายตราบเท่าที่มันใช้งานได้

9
การออกแบบ OO ใดที่จะใช้ (มีรูปแบบการออกแบบ)
ฉันมีวัตถุสองชิ้นที่แสดงถึง 'บาร์ / คลับ' (สถานที่ที่คุณดื่ม / สังสรรค์) ในสถานการณ์หนึ่งฉันต้องการชื่อบาร์ที่อยู่ระยะทางสโลแกน ในสถานการณ์อื่นฉันต้องการชื่อบาร์, ที่อยู่, URL เว็บไซต์, โลโก้ ดังนั้นฉันจึงมีวัตถุสองชิ้นที่เป็นตัวแทนของสิ่งเดียวกัน แต่มีเขตข้อมูลที่แตกต่างกัน ผมชอบที่จะใช้วัตถุที่ไม่เปลี่ยนรูปเพื่อให้ทุกสาขามีการตั้งค่าจากตัวสร้าง ตัวเลือกหนึ่งคือการมีสองคอนสตรัคเตอร์และโมฆะสาขาอื่น ๆ เช่น: class Bar { private final String name; private final Distance distance; private final Url url; public Bar(String name, Distance distance){ this.name = name; this.distance = distance; this.url = null; } public …

4
ฉันต้องทนทุกข์ทรมานจากการห่อหุ้มมากเกินไป?
ฉันสังเกตเห็นบางอย่างในรหัสของฉันในโครงการต่าง ๆ ที่ดูเหมือนว่ากลิ่นรหัสให้ฉันและสิ่งที่ไม่ดีที่จะทำ แต่ฉันไม่สามารถจัดการกับมัน ในขณะที่พยายามเขียน "รหัสสะอาด" ฉันมักจะใช้วิธีส่วนตัวมากเกินไปเพื่อให้อ่านรหัสได้ง่ายขึ้น ปัญหาคือรหัสนั้นสะอาดกว่า แต่ก็ยากกว่าในการทดสอบ (ใช่ฉันรู้ว่าฉันสามารถทดสอบวิธีการส่วนตัว ... ) และโดยทั่วไปดูเหมือนว่านิสัยที่ไม่ดีสำหรับฉัน นี่คือตัวอย่างของคลาสที่อ่านข้อมูลบางอย่างจากไฟล์. csv และส่งคืนกลุ่มลูกค้า (วัตถุอื่นที่มีเขตข้อมูลและแอตทริบิวต์ต่าง ๆ ) public class GroupOfCustomersImporter { //... Call fields .... public GroupOfCustomersImporter(String filePath) { this.filePath = filePath; customers = new HashSet<Customer>(); createCSVReader(); read(); constructTTRP_Instance(); } private void createCSVReader() { //.... } private void …

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

4
ตัววนซ้ำมีสัญญาโดยนัยแบบไม่ทำลายหรือไม่?
สมมติว่าฉันกำลังออกแบบโครงสร้างข้อมูลที่กำหนดเองเช่นสแต็กหรือคิว (ตัวอย่างเช่น - อาจเป็นคอลเลกชันที่สั่งโดยพลการอื่น ๆ ที่มีตรรกะเทียบเท่าpushและpopวิธีการ - นั่นคือวิธีการเข้าถึงแบบทำลายล้าง) หากคุณกำลังใช้ตัววนซ้ำ (ใน. NET โดยเฉพาะIEnumerable<T>) กับคอลเล็กชันนี้ที่ปรากฏในแต่ละการวนซ้ำนั่นจะเป็นการผิดIEnumerable<T>สัญญาโดยนัยหรือไม่? ไม่IEnumerable<T>ได้มีการทำสัญญานี้โดยนัย? เช่น: public IEnumerator<T> GetEnumerator() { if (this.list.Count > 0) yield return this.Pop(); else yield break; }

3
CRTP ใช้ไปมากน้อยแค่ไหน? และทำไมเป็น / ไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันกำลังคิดเกี่ยวกับรูปแบบเทมเพลตที่เกิดขึ้นซ้ำๆ ฉันพบว่ามันค่อนข้างมีประโยชน์และมันก็ปรับได้ดีสำหรับงานหลายอย่าง แต่ฉันต้องยอมรับฉันไม่เห็นรหัส CRTP ส่วนมาก เข้าใจยากไหม ฟังก์ชั่นเสมือนโดยรวมง่ายขึ้นหรือไม่ ไม่ควรใช้กับ 90% ของกรณีที่คำหลักเสมือนปรากฏขึ้น

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

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