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

คำถามเกี่ยวกับการแก้ปัญหาและการวางแผนแก้ปัญหาผ่านการออกแบบซอฟต์แวร์

15
ฉันควรจะฝึกการเขียนโปรแกรมด้วยตนเองหรือเรียนรู้วิธีการเข้ารหัสอย่างมืออาชีพ [ปิด]
เมื่อไม่นานมานี้ฉันได้ทำงานอย่างมืออาชีพออกไปเที่ยวกับโปรแกรมเมอร์คนอื่น ๆ และหาเพื่อนในอุตสาหกรรมนี้ สิ่งเดียวคือฉันเรียนรู้ด้วยตนเอง 100% มันทำให้สไตล์ของฉันเบี่ยงเบนไปจากสไตล์ของผู้ที่ได้รับการฝึกฝนอย่างเหมาะสม มันเป็นเทคนิคและการจัดระเบียบของรหัสของฉันที่แตกต่างกัน มันเป็นส่วนผสมของหลายสิ่งที่ฉันทำ ฉันมักจะผสมผสานกระบวนทัศน์การเขียนโปรแกรมหลายอย่างเข้าด้วยกัน ชอบฟังก์ชั่นและ OO ฉันเอนตัวไปยังส่วน Functional มากกว่า OO แต่ฉันเห็นการใช้ OO เมื่อมีบางสิ่งที่สมเหตุสมผลสำหรับนามธรรม เหมือนเกมวัตถุ ต่อไปฉันก็ไปเส้นทางที่เรียบง่ายเมื่อทำอะไรบางอย่าง ในทางกลับกันดูเหมือนว่าบางครั้งรหัสที่ฉันเห็นจากโปรแกรมเมอร์มืออาชีพนั้นซับซ้อนเพื่อประโยชน์ของมัน! ฉันใช้การปิดเยอะ และท้ายที่สุดฉันไม่ใช่คนวิจารณ์ที่ดีที่สุด ฉันพบว่าการอ่านรหัสของฉันง่ายกว่าการอ่านความคิดเห็น และกรณีส่วนใหญ่ฉันเพิ่งอ่านรหัสแม้ว่าจะมีความคิดเห็น นอกจากนี้ฉันยังได้รับการบอกว่าเพราะฉันเขียนรหัสของฉันได้ง่ายเพียงแค่อ่าน ฉันได้ยินว่าโปรแกรมเมอร์ที่ผ่านการฝึกอบรมอย่างมืออาชีพยังคงดำเนินต่อไปเกี่ยวกับเรื่องต่าง ๆ เช่นการทดสอบหน่วย บางสิ่งที่ฉันไม่เคยใช้มาก่อนดังนั้นฉันจึงไม่มีแม้แต่ความคิดที่ลึกซึ้งที่สุดว่าพวกเขาคืออะไรหรือทำงานอย่างไร ขีดเส้นใต้จำนวนมาก "_" ซึ่งไม่ใช่รสนิยมของฉัน เทคนิคส่วนใหญ่ที่ฉันใช้ตรงจากฉันหรือหนังสือสองสามเล่มที่ฉันอ่าน ไม่ทราบอะไรเกี่ยวกับ MVC ฉันเคยได้ยินมามากมายเกี่ยวกับเรื่องนี้ด้วยสิ่งต่าง ๆ เช่น backbone.js ฉันคิดว่ามันเป็นวิธีการจัดระเบียบแอปพลิเคชัน มันทำให้ฉันสับสนเพราะตอนนี้ฉันสร้างโครงสร้างองค์กรของตัวเองแล้ว มันช่างเจ็บปวดเหลือเกิน ฉันไม่สามารถใช้แอปพลิเคชันเทมเพลตได้เลยเมื่อเรียนรู้สิ่งใหม่ ๆ อย่าง Ubuntu อย่างรวดเร็ว ฉันมีปัญหาในการทำความเข้าใจรหัสที่ฉันสามารถบอกได้ว่ามาจากผู้ที่ได้รับการฝึกฝน การเขียนโปรแกรม …

5
ฉันผิดที่คิดว่าต้องการบางอย่างเช่น AutoMapper เป็นสิ่งบ่งบอกถึงการออกแบบที่ไม่ดีหรือไม่?
Automapperเป็น "ผู้ทำแผนที่วัตถุ - วัตถุ" สำหรับ. Net ซึ่งหมายถึงการคัดลอกวัตถุจากคลาสไปยังคลาสอื่นที่แสดงถึงสิ่งเดียวกัน ทำไมสิ่งนี้ถึงมีประโยชน์ การทำซ้ำของคลาสเคยมีประโยชน์ / ออกแบบดีหรือไม่?
35 c#  design  .net 

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

2
แบบแผนการตั้งชื่อ DAL, BAL และเลเยอร์ UI [ปิด]
ฉันกำลังพัฒนาเว็บแอปพลิเคชันทั่วไปด้วยเลเยอร์ต่อไปนี้ เลเยอร์ UI (MVC) ชั้นตรรกะทางธุรกิจ (BAL) ชั้นการเข้าถึงข้อมูล (DAL) แต่ละชั้นมีวัตถุ DTO ของตัวเองรวมถึง BAL และ DAL คำถามของฉันเกี่ยวกับเรื่องนี้มีดังนี้ DTO ที่ส่งคืนโดย DAL จะถูกแปลงเป็น DTO ที่สอดคล้องกันใน BAL และส่งไปยังเลเยอร์ UI ทั้งคุณลักษณะและโครงสร้างของวัตถุ DTO เหมือนกันในบางกรณี ในสถานการณ์ดังกล่าวจะเป็นการดีกว่าที่จะเพียงแค่ส่งกลับ DTO ใน DAL ไปยังเลเยอร์ UI โดยไม่รวมวัตถุระดับกลาง เป็นวิธีที่ดีที่สุดในการตั้งชื่อวัตถุ DTO เหล่านี้และวัตถุอื่น ๆ ในแต่ละชั้น ฉันควรใช้คำนำหน้าเช่น DTOName, ServiceName หรือไม่ เหตุผลที่ฉันขอให้ใช้คำนำหน้าเป็นเพราะถ้าไม่ใช่คลาสในโซลูชันของฉันขัดแย้งกับคลาสอื่น ๆ ใน Framework และด้วยคำนำหน้ามันง่ายกว่าที่ฉันจะเข้าใจว่าแต่ละคลาสอยู่ที่ไหน?
35 c#  design  naming 

4
โครงสร้างข้อมูลเบื้องหลังสเปรดชีตคืออะไร
ฉันต้องการเข้าใจว่าสเปรดชีต (กลุ่มของเซลล์ที่ระบุชื่อหรือที่ระบุไว้เป็นอย่างอื่นที่มีค่าหรือสูตรที่อ้างอิงเซลล์อื่น ๆ ) ได้รับการแก้ไขอย่างไร ฉันลองดูโครงการที่มีอยู่แล้ว แต่มีมากขึ้นกับ GUI, การทำให้เป็นอนุกรม, กิจกรรม, ฯลฯ ที่ฉันไม่พบสเปรดชีต ที่ง่ายที่สุดมันทำงานอย่างไร

5
วิธีที่ดีที่สุดในการทดสอบหน่วยวิธีการที่เรียกวิธีการอื่น ๆ ในชั้นเรียนเดียวกัน
เมื่อเร็ว ๆ นี้ฉันได้พูดคุยกับเพื่อนบางคนซึ่งวิธีการ 2 วิธีต่อไปนี้ดีที่สุดในการส่งคืนผลลัพธ์หรือการโทรไปยังวิธีการในชั้นเรียนเดียวกันจากวิธีการในชั้นเรียนเดียวกัน นี่เป็นตัวอย่างที่ง่ายมาก ในความเป็นจริงฟังก์ชั่นมีความซับซ้อนมากขึ้น ตัวอย่าง: public class MyClass { public bool FunctionA() { return FunctionB() % 2 == 0; } protected int FunctionB() { return new Random().Next(); } } ดังนั้นเพื่อทดสอบสิ่งนี้เรามี 2 วิธี วิธีที่ 1: ใช้ฟังก์ชั่นและการกระทำเพื่อแทนที่ฟังก์ชั่นของวิธีการ ตัวอย่าง: public class MyClass { public Func<int> FunctionB { get; set; } …

2
วิธีการปรับปรุงตามรูปแบบของตัวสร้างของ Bloch เพื่อให้เหมาะสมกับการใช้งานในชั้นเรียนที่ขยายได้สูง
ฉันได้รับอิทธิพลอย่างมากจากหนังสือ Java ที่มีประสิทธิภาพของ Joshua Bloch (ฉบับที่ 2) ซึ่งอาจจะมากกว่าหนังสือโปรแกรมที่ฉันอ่าน โดยเฉพาะรูปแบบตัวสร้างของเขา (รายการ 2) มีผลมากที่สุด แม้ผู้สร้างของ Bloch จะช่วยให้ฉันออกไปไกลกว่าเดิมในช่วงสองเดือนกว่าในช่วงสิบปีที่ผ่านมาของการเขียนโปรแกรม แต่ฉันก็ยังพบว่าตัวเองกำลังชนกำแพงเดียวกัน: การขยายชั้นเรียนด้วยโซ่ตรวนวิธีการกลับมาด้วยตนเอง - โดยเฉพาะอย่างยิ่งเมื่อ generics เข้ามาเล่นและโดยเฉพาะอย่างยิ่งกับgenerics อ้างอิงตนเอง (เช่นComparable<T extends Comparable<T>>) มีความต้องการหลักสองประการที่ฉันมีอยู่เพียงข้อที่สองที่ฉันต้องการเน้นในคำถามนี้: ปัญหาแรกคือ "วิธีการแบ่งปันวิธีการส่งกลับโซ่ตนเองโดยไม่ต้องใช้พวกเขาในทุก ... เดียว ... ชั้น?" สำหรับผู้ที่อาจจะอยากรู้อยากเห็นฉันได้กล่าวถึงส่วนนี้ที่ด้านล่างของคำตอบโพสต์นี้ แต่ไม่ใช่สิ่งที่ฉันต้องการมุ่งเน้นที่นี่ ปัญหาที่สองที่ฉันขอความคิดเห็นคือ "ฉันจะสร้างตัวสร้างในชั้นเรียนที่มีความตั้งใจที่จะขยายโดยชั้นเรียนอื่น ๆ อีกมากมายได้อย่างไร" การขยายชั้นเรียนด้วยตัวสร้างนั้นเป็นเรื่องยากกว่าการขยายชั้นเรียนแบบไม่มี การขยายชั้นเรียนที่มีการสร้างเป็นที่ยังดำเนินการNeedableและดังนั้นจึงมียาชื่อสามัญสำคัญที่เกี่ยวข้องกับมันเป็นเทอะทะ นั่นคือคำถามของฉัน: ฉันจะปรับปรุง (สิ่งที่ฉันเรียกว่า) ตัวสร้าง Bloch ได้อย่างไรฉันจึงสามารถแนบตัวสร้างกับคลาสใดก็ได้ - แม้ว่าคลาสนั้นจะมีความหมายว่า "คลาสพื้นฐาน" ที่อาจเป็น …

8
เหตุใด Clang / LLVM จึงเตือนฉันเกี่ยวกับการใช้ค่าเริ่มต้นในคำสั่ง switch ที่ครอบคลุมทุกกรณีที่แจกแจง?
พิจารณาคำสั่ง enum และ switch ต่อไปนี้: typedef enum { MaskValueUno, MaskValueDos } testingMask; void myFunction(testingMask theMask) { switch (theMask) { case MaskValueUno: {}// deal with it case MaskValueDos: {}// deal with it default: {} //deal with an unexpected or uninitialized value } }; ฉันเป็นโปรแกรมเมอร์ Objective-C แต่ฉันเขียนสิ่งนี้ใน C บริสุทธิ์สำหรับผู้ชมที่กว้างขึ้น Clang / LLVM …

6
มีรูปแบบการออกแบบที่จะนำไปใช้กับแบบจำลองส่วนลดหรือไม่?
มีรูปแบบการออกแบบใดบ้างที่รู้จักกันในการใช้โมเดลจำลองส่วนลดหรือไม่? ตามแบบจำลองส่วนลดฉันหมายถึงสิ่งต่อไปนี้: หากลูกค้าซื้อผลิตภัณฑ์ X, ผลิตภัณฑ์ Y และผลิตภัณฑ์ Z เขาจะได้รับส่วนลด 10% หรือ $ 100 หากลูกค้าซื้อผลิตภัณฑ์ X 100 หน่วยเขาจะได้รับส่วนลด 15% หรือ $ 500 หากลูกค้านำมาในปีที่แล้วมากกว่า $ 100K เขาจะได้รับส่วนลด 20% หากลูกค้าซื้อผลิตภัณฑ์ X 2 หน่วยเขาจะได้รับผลิตภัณฑ์ X (หรือ Y) 1 หน่วยฟรี ... มีรูปแบบทั่วไปที่สามารถใช้เพื่อจัดการสถานการณ์ข้างต้นทั้งหมดได้หรือไม่ ฉันกำลังคิดของรุ่นไม่กี่ แต่ไม่สามารถเจอแบบทั่วไป

8
วิธีที่ดีที่สุดในการออกแบบเว็บไซต์ให้มีความยืดหยุ่นสูงคืออะไร?
สำหรับเว็บไซต์ที่ต้องปรับขนาดได้สูงเช่นเครือข่ายสังคมออนไลน์อย่าง facebook วิธีที่ดีที่สุดในการออกแบบเว็บไซต์คืออะไร ฉันควรมีบริการเว็บที่เว็บไซต์สอบถามเพื่อรับข้อมูลที่ต้องการหรือไม่ หรือ ควรสอบถามฐานข้อมูลเว็บไซต์โดยตรงหรือไม่ (สามารถทำได้โดยใช้ built-in สร้างภาษาเพื่อเติมตารางอัตโนมัติ ฯลฯ ) ฉันคิดว่าบริการเว็บเป็นการออกแบบที่ดีกว่าเนื่องจากให้การเข้าถึงข้อมูลจากส่วนกลางและสิ่งต่าง ๆ เช่นแคชและสิ่งที่คล้ายกันนั้นควบคุมได้ง่ายกว่า แต่คนอื่น ๆ คิดอย่างไร

1
รหัสไม่เกี่ยวข้องแห้ง แต่เกือบจะเหมือนกัน
ฉันมีรหัสบางอย่างที่เกือบจะเหมือนกัน แต่ใช้ประเภทที่แตกต่างกันอย่างสิ้นเชิงโดยไม่มีการสืบทอดระหว่างตัวแปรหลัก โดยเฉพาะฉันเขียนวิเคราะห์ด้วย Roslyn สำหรับ C # และ VB.NET ด้วยประเภทต่อไปนี้: Microsoft.CodeAnalysis.CSharp.Syntax.AttributeSyntax Microsoft.CodeAnalysis.VisualBasic.Syntax.AttributeSyntax ฉันสงสัยว่าเนื่องจากรหัสกำลังทำสิ่งเดียวกันฉันควรเก็บไว้เป็น DRY เท่าที่จะทำได้โดยแยกออกน้อยที่สุดเท่าที่จะทำได้เป็นวิธีแยกต่างหาก (แต่เหมือนกันนอกเหนือจากชนิด) หรือแยกออกจากกันอย่างสิ้นเชิงเพราะทั้งสองวิธี การเปลี่ยนแปลงที่ไม่เกี่ยวข้องและในอนาคตอาจบังคับให้รุ่นหนึ่งเปลี่ยนแปลง แต่ไม่ใช่รุ่นอื่น ๆ (แม้ว่าจะไม่น่าเป็นไปได้) แก้ไข:หนึ่งปีหรือหลังจากนั้นฉันก็ตีปัญหาเดียวกันนี้และทีม Roslyn ช่วยฉันแก้ปัญหา: เขียนคลาสพื้นฐานที่ใช้ชื่อสามัญและมีTAttributeSyntaxพารามิเตอร์ที่ใช้งานได้เกือบทั้งหมด จากนั้นให้เขียนคลาสที่ได้รับมาพร้อมกับข้อมูลขั้นต่ำสุดที่จำเป็นต้องใช้ประเภทเฉพาะ
33 c#  design  dry 

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

10
มุมมองและโมเดลควรสื่อสารหรือไม่?
ตามหน้าวิกิพีเดียสำหรับสถาปัตยกรรม MVCมุมมองนั้นจะได้รับการแจ้งเตือนจากตัวแบบได้อย่างอิสระและยังมีอิสระในการสอบถามตัวแบบเกี่ยวกับสถานะปัจจุบันของมัน อย่างไรก็ตามตามหลักสูตรของ Paul Hegarty บน iOS 5 ที่ Stanford การบรรยายที่ 1 หน้า 18การโต้ตอบทั้งหมดจะต้องผ่านตัวควบคุมด้วย Model and View ที่ไม่ควรจะรู้จักกัน มันไม่ชัดเจนสำหรับฉันถ้าคำแถลงของ Hegarty จะต้องทำให้ง่ายขึ้นสำหรับหลักสูตร แต่ฉันอยากพูดว่าเขาตั้งใจออกแบบเช่นนี้ คุณจะอธิบายมุมมองตรงข้ามทั้งสองนี้ได้อย่างไร
33 design  mvc 

8
SOLID, หลีกเลี่ยงโดเมนโลหิตจาง, การฉีดพึ่งพา?
แม้ว่านี่อาจเป็นคำถามที่ไม่เชื่อเรื่องภาษา แต่ฉันก็สนใจที่จะตอบคำถามเกี่ยวกับระบบนิเวศ. NET นี่คือสถานการณ์สมมติว่าเราจำเป็นต้องพัฒนาแอปพลิเคชั่นคอนโซลอย่างง่ายสำหรับการบริหารสาธารณะ แอปพลิเคชันเกี่ยวกับภาษีรถยนต์ พวกเขา (เท่านั้น) มีกฎเกณฑ์ทางธุรกิจดังต่อไปนี้: 1.a) หากยานพาหนะเป็นรถยนต์และครั้งสุดท้ายที่เจ้าของชำระภาษีคือ 30 วันที่ผ่านมาเจ้าของจะต้องจ่ายอีกครั้ง 1.b) หากยานพาหนะเป็นมอเตอร์ไซค์และครั้งสุดท้ายที่เจ้าของชำระภาษีคือ 60 วันที่ผ่านมาเจ้าของจะต้องจ่ายอีกครั้ง กล่าวอีกนัยหนึ่งถ้าคุณมีรถคุณต้องจ่ายทุก ๆ 30 วันหรือถ้าคุณมีมอเตอร์ไซค์คุณต้องจ่ายทุก ๆ 60 วัน สำหรับยานพาหนะแต่ละคันในระบบแอปพลิเคชันควรทดสอบกฎเหล่านั้นและพิมพ์ยานพาหนะเหล่านั้น (หมายเลขทะเบียนรถและข้อมูลเจ้าของรถ) ที่ไม่เป็นที่พอใจ สิ่งที่ฉันต้องการคือ: 2.a) สอดคล้องกับหลักการ SOLID (โดยเฉพาะอย่างยิ่งหลักการ Open / Closed) สิ่งที่ฉันไม่ต้องการคือ (ฉันคิดว่า): 2.b) โดเมนโลหิตจางดังนั้นตรรกะทางธุรกิจจึงควรเข้าสู่องค์กรธุรกิจ ฉันเริ่มต้นด้วยสิ่งนี้: public class Person // You wanted a banana but what you …
33 c#  .net  design  architecture 

11
รูปแบบการออกแบบโดยทั่วไปเป็นแรงที่ดีหรือไม่ดีหรือไม่? [ปิด]
ฉันได้ยินมาว่าเป็นที่ถกเถียงกันอยู่ว่ารูปแบบการออกแบบเป็นสิ่งที่ดีที่สุดตั้งแต่หั่นขนมปัง ฉันเคยได้ยินด้วยว่ามันเป็นที่ถกเถียงกันอยู่ว่ารูปแบบการออกแบบมีแนวโน้มที่จะรุนแรงขึ้น "Second System Syndrome" ที่พวกเขาใช้งานมากเกินไปและทำให้ผู้ใช้คิดว่าพวกเขาเป็นนักออกแบบที่ดีกว่าพวกเขาจริงๆ ฉันมักจะเข้าใกล้ค่ายเก่ามากขึ้น แต่เมื่อเร็ว ๆ นี้ฉันได้เห็นการออกแบบที่เกือบทุกการโต้ตอบจะถูกแทนที่ด้วยความสัมพันธ์ของผู้สังเกตการณ์และทุกสิ่งทุกอย่างล้วนเป็นซิงเกิล ดังนั้นเมื่อพิจารณาถึงประโยชน์และปัญหารูปแบบการออกแบบโดยทั่วไปดีหรือไม่ดีและเพราะอะไร

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