เมื่อออกแบบระบบเป็นวิธีปฏิบัติที่ดีที่สุดในการรองรับการออกแบบรอบกรอบที่คุณจะใช้หรือไม่?


37

เมื่อพัฒนาระบบหรือแอพพลิเคชั่นที่คุณวางแผนที่จะใช้กับเฟรมเวิร์กบางอย่างมันเป็นการปฏิบัติที่ดีที่สุดในการออกแบบระบบโดยไม่ต้องมีเฟรมเวิร์กในใจหรือดีกว่าในการออกแบบระบบด้วยความคิด ด้วยสิ่งนี้".


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

1
กรอบวัตถุประสงค์ทั่วไปออกแบบมาเพื่อแก้ปัญหาทางเทคนิค
Robert Pounder

2
ขนาดเล็กเนื่องจากไม่มีเวลา (ฉันอยู่ในการทำงานอาจอธิบายเพิ่มเติมภายหลัง): ฉันกำลังเขียนระบบที่สร้างอีเมลตามการออกแบบ - ถ้าฉันเขียนสิ่งนี้ใน Laravel ฉันอาจจะใช้เครื่องมือ "ใบมีด" ของพวกเขาในการออกแบบอีเมลซึ่งจะทำให้การออกแบบระบบง่ายขึ้นมากในแง่ของการไหล อย่างไรก็ตามฉันจะต้องไปเกี่ยวกับการเขียนเครื่องยนต์ templating ถ้าฉันทำมันวานิลลา PHP หรือหาระบบ templating ทางเลือกอื่นที่เหมาะสม มันจะเพิ่มไปยังกระบวนการออกแบบซึ่งคำถามก็อ้างถึงเช่นกัน
Robert Pounder

3
คำถามนี้จะสร้างคำตอบที่แตกต่างกันอย่างมากมายเพราะ "ทั้งเฟรมเวิร์ก" และ "การออกแบบ" เป็นคำที่เต็มไปด้วยความหมายหลายอย่างในอุตสาหกรรมของเรา ยิ่งไปกว่านั้นสำหรับนิยามของกรอบงานเดียวในฐานะ "กรอบวัตถุประสงค์ทั่วไปที่ออกแบบมาเพื่อแก้ไขปัญหาทางเทคนิค" มันจะขึ้นอยู่กับกรอบเฉพาะ - กรอบบางกรอบมีความเห็นมากกว่าคนอื่น ๆ
stannius

1
มันจะเลวร้ายเกินไปหากถูกรถบัสชนขณะที่หลงทางในความคิดที่พยายามออกแบบรถขนส่งสาธารณะแบบมีล้อ

คำตอบ:


51

การออกแบบของคุณควรตอบสนองความต้องการของลูกค้าอย่างใกล้ชิดที่สุด จำไว้ว่าการออกแบบนั้นมีสิ่งเล็ก ๆ น้อย ๆ เช่น:

  • ประสบการณ์ของผู้ใช้
  • ฟังก์ชั่น
  • แอปพลิเคชันของคุณสื่อสารกันอย่างไร (กับตัวเองหรือเอนทิตีภายนอก)

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

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

ในระยะสั้น

  • ออกแบบสำหรับผู้ใช้ของคุณ
  • เลือกเครื่องมือที่เหมาะสมเพื่อให้การออกแบบของคุณสำเร็จ
  • ใช้เครื่องมือของคุณในแบบที่พวกเขาออกแบบมาเพื่อใช้งาน

ความคิดเพิ่มเติม:

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


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

4
ดูเหมือนจะมีความสับสนระหว่างการออกแบบในระดับต่างๆที่นี่: การออกแบบระบบและการออกแบบอย่างละเอียด สำหรับฉันคำถามนี้ถามเกี่ยวกับการออกแบบอย่างละเอียด (วิธีการนำไปใช้) มากกว่าระบบ (อินเตอร์เฟส, การทำงานพร้อมกัน, ปริมาณข้อมูล, ส่วนต่อประสานผู้ใช้, ประเภทผู้ใช้)
Gusdor

2
หากคำถามเปลี่ยนมาเป็น "การออกแบบทางเทคนิค" ภาษาและระบบปฏิบัติการอาจมีข้อสรุปในการออกแบบ แต่ถึงกระนั้นการออกแบบก็ไม่ได้นำไปใช้ หากคุณกำลังคิดในความสามารถของ Frameworks มันไม่ได้ออกแบบมันเป็นการปลูกฝัง หากคุณยึดการออกแบบตามกรอบความคิดคุณควรเตรียมพร้อมสำหรับความอ่อนแอ และเมื่อความอ่อนแอตอบสนองความต้องการคุณมีปัญหาใหญ่ บริษัท ที่ใหญ่ที่สุดไม่ได้สร้างกรอบการทำงานที่สร้างขึ้นเพื่อความสุข
Laiv

1
@Laiv ความคิดเห็นยอดเยี่ยม! จริงๆแล้วมันคือ "บางส่วน" ปืนเล็บและปืนพกทั้งคู่สามารถยึดสิ่งของได้สิ่งหนึ่งพลิกกลับได้มากกว่าอีกอันหนึ่งและทำงานช้าลงและซับซ้อนกว่ามาก ทุกคนเลือกทำย่อมหลีกเลี่ยงการแลกเปลี่ยน คุณจ่ายเงินและใช้โอกาสของคุณ

1
@RobertPounder มันเป็นเครื่องมือที่เหมาะสมสำหรับการแก้ปัญหาต้องตัดสินใจในขณะที่การออกแบบระบบ ฉันเข้าใจว่ากรอบงานสามารถมีอิทธิพลต่อการออกแบบได้อย่างไร แต่พวกเขาไม่ควรกำหนด
Berin Loritsch

27

เฟรมเวิร์กมีอิทธิพลต่อการออกแบบโมดูลและระบบย่อยโดยเฉพาะ (เช่น GUI front-end) ตามคำตอบอื่น ๆ ที่กล่าวถึงคุณจะมีช่วงเวลาที่ยากลำบากหากคุณพบว่าตัวเองต่อสู้กับกรอบที่คุณเลือก

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

คุณอาจจะใช้กรอบงานที่แตกต่างกันในการแก้ปัญหาที่แตกต่างกัน เป็นระบบของคุณจะมีความซับซ้อนมากขึ้นคุณจะต้องระมัดระวังไม่ให้สร้างลูกใหญ่ของโคลน หากเป็นไปได้ให้รักษาระบบของคุณแบบแยกส่วนและรวมเข้าด้วยกันอย่างหลวม ๆ เฟรมเวิร์กบางตัวอาจถูกเก็บไว้ด้านหลัง abstractions ได้ดีขึ้นโดยการเขียน wrappers และอะแดปเตอร์ซึ่ง 'ซ่อน' เวิร์กโฟลว์เฉพาะ Framework ออกไปจากส่วนประกอบอื่น ๆ ชุดเครื่องมือ GUI มีแนวโน้มที่จะให้บริการฟังก์ชันการทำงานของ Front-end GUI เท่านั้นดังนั้นโมดูล GUI เหล่านั้นควรอยู่ห่างจากส่วนที่เหลือของระบบ

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

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

พยายามระลึกถึงสิ่งต่อไปนี้สำหรับการออกแบบภาพใหญ่ของคุณ:


บางครั้งดูเหมือนว่าผู้เขียนเฟรมเวิร์กบางคนไม่สนใจเลยเพราะผู้ใช้ของพวกเขากำลังเขียนโค้ดแอปพลิเคชันให้แน่นควบคู่กับเฟรมเวิร์ก
จาก

2
@COMEFROM - การเชื่อมโยงโค้ดของคุณกับเฟรมเวิร์กอย่างแน่นหนาจะได้รับการสนับสนุนจากนักพัฒนาเพราะพวกเขาคิดว่าคุณเลือกกรอบการทำงานเพื่อแก้ไขปัญหาเดียวกับที่พวกเขาออกแบบมาตั้งแต่แรก
JeffO

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

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

2
ฉันต้องไม่เห็นด้วยกับ @nocomprende ที่นี่; ไม่ใช่ทุกความต้องการในอนาคตสามารถคาดการณ์แต่ระบบบางครั้งเขียนใหม่เพียงเพราะซอฟแวร์ก่อนหน้านี้ยากเกินไปที่จะขยาย / รักษา
SeldomNeedy

7

ใช่คุณควรติดให้มากที่สุดเท่าที่จะทำได้ในกรอบที่ "บอก" ให้คุณทำ

เหตุผลก็คือยิ่งคุณยึดติดกับกรอบของ "ความคิด" มากเท่าไหร่คุณก็ยิ่งคุยกับนักพัฒนาคนอื่น ๆ ได้ง่ายขึ้นเกี่ยวกับปัญหา / ความคิดของคุณที่ใช้กรอบงานนั้น

คุณเพิ่มความสามารถในการทำงานร่วมกันและใช้งานง่ายสำหรับคนอื่น ๆ ที่ใช้งานในภายหลังคุณจะเข้าใจและรวมบทเรียนหรือวิธีแก้ปัญหาทั่วไปที่ดีกว่าถ้าคุณยึดมั่นในปรัชญาพื้นฐานของสิ่งที่คุณกำลังใช้

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

โดยทั่วไปสิ่งนี้สามารถนำไปใช้กับการตัดสินใจอื่นเช่นกัน คุณควรใช้ภาษาที่คุณใช้อย่างใกล้ชิดตามที่ตั้งใจไว้เพราะจะทำให้สิ่งต่าง ๆง่ายขึ้นถ้าคุณพูดภาษาเดียวกันกับคนอื่น


อาจเป็นเพราะคุณควรตรวจสอบคำตอบของคุณเนื่องจากการเปลี่ยนแปลงคำถาม คำตอบของคุณไม่ตอบคำถามของ OP
Laiv

1
@Laiv ฉันไม่เห็นวิธีที่จะไม่ตอบคำถามแม้ว่ามันอาจจะไม่ตรงกับความคิดเห็นของคุณในหัวข้อ แต่ก็ยังคงเป็นคำตอบ คุณยินดีที่จะเขียนคำตอบของคุณเองเพื่อแสดงลักษณะที่ขัดแย้งกันของหัวข้อที่เป็นปัญหา
FP

ขอโทษนะถ้าฉันไม่ได้อธิบายตัวเองดี ฉันพูดภาษาอังกฤษไม่คล่องเท่าที่ฉันต้องการ ฉันแค่อยากจะบอกว่า IMO คำถามและคำตอบของคุณพูดเกี่ยวกับสิ่งต่าง ๆ ถ้าคุณคิดว่าพวกเขาทำไม่เป็นไร ฉันจะไม่เถียงว่า แค่นั้นแหละ.
Laiv

1
นี่มันอย่างแน่นอน มันคล้ายกับวิธีการใช้ภาษาเฉพาะโดเมนและแนวคิดที่คล้ายกัน ผลิตภัณฑ์ของคุณมีรูปทรงโดยเครื่องมือ (Framework) ไม่ใช่วิธีอื่น ๆ กรอบงาน "ชนะ" หากคุณไม่สามารถแต่งงานได้ให้เลือกคนอื่น (คำแนะนำ: ไม่มีFramework ในอุดมคติเพียงแค่บอกว่า ')

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