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

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

2
อะไรคือความคิดเห็นของคุณเกี่ยวกับ“ Gamification”? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันดูวิดีโอ Google Talk ที่น่าสนใจ (เตือนเกี่ยวกับเวลาของคุณหนึ่งชั่วโมง) เกี่ยวกับ Gamification ในสิ่งที่คุณกำลังทำ เป็นที่ชัดเจนว่าชุดของไซต์ StackExchange ใช้หลักการเหล่านี้ค่อนข้างน้อย มีบางอย่างที่น่าสนใจเกี่ยวกับการทำให้การทำงานสนุก แต่ฉันสงสัยว่าโดเมนปัญหาจำนวนมากสามารถรวมแนวคิดเหล่านี้ได้อย่างไร มันใช้กับแอปพลิเคชั่นโซเชียลอย่างแน่นอน แนวคิดของโปรแกรมความภักดีเสมือนนั้นก็น่าสนใจเช่นกัน คำอธิบายสั้น ๆ ของ Gamification: มีระบบการให้คะแนนและให้รางวัล ตัวอย่างเช่นชื่อเสียงใน StackExchange เป็นประเภทของการให้คะแนน ป้ายเป็นรางวัลประเภทหนึ่ง สิทธิพิเศษเพิ่มเติมที่คุณได้รับเมื่อชื่อเสียงของคุณเพิ่มขึ้นก็เป็นรางวัลเช่นกัน ตัวอย่างของโปรแกรมความภักดีที่ไม่มีการไถ่ถอนจริงจะเป็นโปรโมชั่นที่ร้านสะดวกซื้อใช้เวลานานในการซื้อผลิตภัณฑ์และรับเครดิต FarmVille ไม่มีเงินจริงหรือมือแลกเปลี่ยนสินค้าและค่าใช้จ่ายให้กับผู้ค้าปลีกจะน้อยที่สุดที่ดีที่สุด แต่มันนำมาซึ่งเงินจริงสำหรับการจ่ายคืนเสมือนจริงเหล่านี้ การใช้ลิงค์ของ JohnL อย่างไร้ที่ติ: http://en.wikipedia.org/wiki/Gamification หมายเหตุ: ผู้พูดหมายถึงผู้ใช้สี่คลาสซึ่งดูเหมือนจะเป็นต้นแบบ พวกเขาคือ Achievers, Socializer, Explorer และ Killers ผู้ที่ประสบความสำเร็จมักจะใช้กับโปรแกรมเมอร์ของเราทุกคน …

17
ยังคงมีความจำเป็นในการเขียน SQL หรือไม่?
ด้วยเครื่องมือ ORM จำนวนมากสำหรับภาษาที่ทันสมัยส่วนใหญ่ยังมีกรณีการใช้งานสำหรับการเขียนและดำเนินการ SQL ในโปรแกรมในภาษา / สภาพแวดล้อมที่สนับสนุนพวกเขาหรือไม่? ถ้าเป็นเช่นนั้นทำไม เพื่อความชัดเจน:ฉันไม่ได้ถามว่าโปรแกรมเมอร์จำเป็นต้องรู้จัก SQL หรือไม่ถ้าฉันควรมีเครื่องมือ SQL บนเดสก์ท็อปของฉัน ฉันถามโดยเฉพาะว่าทำไมฉันถึงมีมันในรหัส (หรือ config หรืออะไรก็ตาม) เมื่อเทียบกับ ORM
12 design  sql 

6
การสร้างเอกสารการออกแบบซอฟต์แวร์หลังจากการพัฒนานั้นเป็นธรรม
ปัจจุบันฉันกำลังศึกษาเรื่อง "การพัฒนาซอฟต์แวร์" ซึ่งฉันต้องพัฒนาซอฟต์แวร์ที่ซับซ้อนเป็นรายบุคคลใน บริษัท ภายนอก ทั้งหมดนี้จะต้องทำในลักษณะที่มีโครงสร้างการสร้างเอกสารที่เกี่ยวข้องทั้งหมด สำหรับโครงการนี้ฉันเลือกทำงานกับเอกสารมาตรฐาน IEEE: เอกสารข้อกำหนดซอฟต์แวร์ (SRS), เอกสารสถาปัตยกรรมซอฟต์แวร์ (SAD) และเอกสารออกแบบซอฟต์แวร์ (SDD) แม้ว่าจะสอนเป็นอย่างอื่นในโรงเรียนสำหรับโครงการนี้ฉันเลือกที่จะสร้าง SDD หลังการพัฒนา (แทนที่จะเป็นก่อนหน้านี้) เหตุผลของฉันคือ บริษัท ที่ฉันฝึกงานได้ให้คำแนะนำฉันในการสร้างซอฟต์แวร์ที่ซับซ้อนขึ้นซึ่งเป็นไปตามข้อกำหนดที่กำหนดในแบบทดลอง เนื่องจากจำนวนเสรีภาพที่พวกเขาให้แก่ฉันในคำจำกัดความของโครงการแทบไม่มีอะไรแน่นอนและสามารถพบได้ดีที่สุดในขณะที่ทดลองในกระบวนการพัฒนา นอกจากนี้ฉันกำลังสร้างซอฟต์แวร์ในลักษณะส่วนบุคคลมันจะไม่มีประโยชน์กับคนอื่น ๆ ใน บริษัท สำหรับฉันที่จะทำให้การออกแบบซอฟต์แวร์นี้มาก่อน ทำมันก่อนก็จะเสียค่าใช้จ่ายเป็นจำนวนมากเวลาที่จะเปลี่ยนมันในภายหลังที่ผมสามารถแน่ใจได้ว่ามีความไม่แน่นอนในโครงการการออกแบบที่ฉันทำก่อนจะต้องมีการเปลี่ยนแปลงไปมาก สิ่งนี้รู้สึกต่อต้านฉัน นี่เป็นเหตุผลที่ดีในการสร้าง SDD หลังจากการพัฒนาหรือไม่? ถ้าไม่จะมีเหตุผลที่ดีสำหรับสิ่งนั้นหรือไม่? แก้ไข: เหตุผลในการสร้าง SDD หลังจากนั้นจะทำให้นักพัฒนาในอนาคตสามารถดำเนินโครงการต่อไปได้ ฉันจะไม่สามารถทำโครงการทั้งหมดให้เสร็จในช่วงเวลาที่สำเร็จการศึกษาดังนั้นนักพัฒนาซอฟต์แวร์รายอื่นจะต้องดำเนินการตามรหัสฐานปัจจุบันต่อไป

5
วิธีการออกแบบข้อยกเว้น
ฉันกำลังดิ้นรนกับคำถามง่าย ๆ : ตอนนี้ฉันกำลังทำงานกับแอปพลิเคชันเซิร์ฟเวอร์และฉันต้องคิดค้นลำดับชั้นสำหรับข้อยกเว้น (มีข้อยกเว้นบางอย่างอยู่แล้ว แต่จำเป็นต้องใช้กรอบงานทั่วไป) ฉันจะเริ่มทำสิ่งนี้ได้อย่างไร ฉันกำลังคิดว่าจะทำตามกลยุทธ์นี้: 1) เกิดอะไรขึ้น? มีบางสิ่งถามซึ่งไม่ได้รับอนุญาต มีการถามอะไรบางอย่างอนุญาต แต่ไม่ทำงานเนื่องจากพารามิเตอร์ผิด มีการถามบางสิ่งอนุญาต แต่ไม่ทำงานเนื่องจากข้อผิดพลาดภายใน 2) ใครเป็นผู้เปิดตัวคำขอ? แอปพลิเคชันไคลเอนต์ แอปพลิเคชันเซิร์ฟเวอร์อื่น 3) การส่งข้อความ: เนื่องจากเรากำลังติดต่อกับแอปพลิเคชันเซิร์ฟเวอร์ทุกอย่างเกี่ยวกับการรับและส่งข้อความ แล้วถ้าเกิดว่าการส่งข้อความผิดพลาดล่ะ ดังนั้นเราอาจได้รับประเภทข้อยกเว้นดังต่อไปนี้: ServerNotAllowedException ClientNotAllowedException ServerParameterException ClientParameterException InternalException (ในกรณีที่เซิร์ฟเวอร์ไม่รู้ว่าคำขอมาจากไหน) ServerInternalException ClientInternalException MessageHandlingException นี่เป็นวิธีการทั่วไปในการกำหนดลำดับชั้นของข้อยกเว้น แต่ฉันกลัวว่าฉันอาจจะขาดบางกรณีที่ชัดเจน คุณมีความคิดเห็นเกี่ยวกับประเด็นที่ฉันไม่ครอบคลุมหรือไม่คุณทราบถึงข้อเสียของวิธีการนี้หรือมีวิธีการทั่วไปในการถามคำถามประเภทนี้ (ในกรณีหลังฉันจะหาได้ที่ไหน) ขอบคุณล่วงหน้า
11 design  c++  exceptions  stl 

1
เหตุใด CharSequence จึงไม่ประกอบด้วย (CharSequence)
สิ่งนี้ใช้กับทั้ง Java SE และ Android เนื่องจากสัญญาเหมือนกัน เอกสาร CharSequence สำหรับ Java SE CharSequence เอกสารประกอบสำหรับ Android CharSequenceไม่ได้กำหนดcontains(CharSequence)วิธีการ ฉันไม่สามารถหาเหตุผลว่าทำไมและรวมถึงมันจะมีประโยชน์มากทำให้ไม่ต้องโทรCharSequence#toString()เพื่อตรวจสอบลำดับของอักขระ ยกตัวอย่างเช่นใน Android ของผู้ใช้ที่ถูกบังคับให้โทรEditable#toString()เพื่อดูว่าจะมีลำดับของอักขระแม้ว่าEditableการดำเนินการCharSequenceซึ่งสามารถหลีกเลี่ยงได้ถ้ากำหนดไว้CharSequencecontains(CharSequence) แนวคิดเบื้องหลังตัวเลือกการออกแบบนี้คืออะไร มันเป็นการกำกับดูแลที่มีศักยภาพหรือมีเหตุผลในการออกแบบสำหรับเรื่องนี้?

2
หากมีสองวิธีในการเข้าใกล้งานวิธีหนึ่งควรเลือกระหว่างพวกเขา?
ฉันมีกรณีการใช้งานเฉพาะและพบ 3 วิธีในการทำผ่านอินเทอร์เน็ตซึ่งกำหนดไว้สำหรับกรณีการใช้งานที่คลุมเครือ ฉันกำลังจ้องมองที่สามคนนี้สงสัยว่าจะใช้ ฉันมักจะนั่งที่นั่นไม่รู้จะทำอะไร - แล้วไม่ทำอะไรเลย ... มีวิธีเลือกอย่างดีไหม? ฉันควรลองพวกเขาทั้งหมดหรือไม่ เพื่อให้มีความเฉพาะเจาะจงมากขึ้นสำหรับบริบทฉันพยายามสร้างเกมกระดานที่มีน้ำหนักเบามากซึ่งฉันต้องการส่วนของหน้าจอที่ฉันสามารถหมุนตารางเกมกระดานซูมเข้าไปในตารางและย้ายชิ้นส่วนบนตารางนี้ ฉันไม่รู้ว่าจะทำอย่างไร แต่ฉันพบสิ่งต่าง ๆ ออนไลน์เช่น Core Animation, Core Graphics, Sprite Kit และฉันเห็นข้อโต้แย้งและต่อต้านพวกเขา - ตัวอย่างเช่น Sprite kit อยู่ในระดับสูง แต่รักษาอัตราเฟรมไว้ที่ 60 ซึ่ง สิ้นเปลืองแบตเตอรี่เมื่อไม่มีอะไรเคลื่อนไหวในหน้าจอ Core Animation เป็น API ระดับต่ำกว่าซึ่งคัดค้านแนวทางของ Apple ในการ "ใช้ระดับสูงสุดของนามธรรม" ฉันไม่ต้องการเรียนรู้ 3 สิ่งที่ต้องใช้ 1 มีวิธีที่ฉันสามารถเลือกและรับ unstuck ได้หรือไม่ ฉันทิ้งคำถามนี้ไว้ค่อนข้างคลุมเครือเพราะฉันคิดว่ามันใช้ได้กับทุกด้านของซอฟต์แวร์

3
สถาปัตยกรรมซอฟต์แวร์กับสถาปัตยกรรมของระบบเทียบกับคลาสไดอะแกรม?
ฉันค่อนข้างสับสนเกี่ยวกับเงื่อนไขดังต่อไปนี้: สถาปัตยกรรมซอฟต์แวร์ สถาปัตยกรรมแอปพลิเคชันซอฟต์แวร์เป็นกระบวนการของการกำหนดโซลูชันที่มีโครงสร้างที่ตรงตามข้อกำหนดทางเทคนิคและการดำเนินงานทั้งหมดในขณะที่ปรับแต่งคุณสมบัติคุณภาพทั่วไปเช่นประสิทธิภาพความปลอดภัยและความสามารถในการจัดการ มันเกี่ยวข้องกับชุดของการตัดสินใจบนพื้นฐานของปัจจัยที่หลากหลายและการตัดสินใจแต่ละครั้งอาจมีผลกระทบอย่างมากต่อคุณภาพประสิทธิภาพการบำรุงรักษาและความสำเร็จโดยรวมของแอปพลิเคชัน ( microsoft ) ระบบสถาปัตยกรรม สถาปัตยกรรมระบบเป็นรูปแบบแนวคิดที่กำหนดโครงสร้างพฤติกรรมและมุมมองเพิ่มเติมของระบบ 1คำอธิบายสถาปัตยกรรมเป็นคำอธิบายอย่างเป็นทางการและเป็นตัวแทนของระบบการจัดระเบียบในลักษณะที่สนับสนุนการให้เหตุผลเกี่ยวกับโครงสร้างและพฤติกรรมของระบบ ( wiki ) คลาสไดอะแกรม ในวิศวกรรมซอฟต์แวร์คลาสไดอะแกรมใน Unified Modeling Language (UML) เป็นไดอะแกรมโครงสร้างแบบสแตติกที่อธิบายโครงสร้างของระบบโดยการแสดงคลาสของระบบคุณลักษณะการดำเนินงาน (หรือเมธอด) และความสัมพันธ์ระหว่างวัตถุ ( วิกิ ) ถ้าฉันอ่านคำอธิบายเหล่านี้ทั้งหมดอธิบายการโต้ตอบระหว่างโมดูลต่าง ๆ ของแอปพลิเคชัน อย่างไรก็ตามความแตกต่างระหว่างสิ่งเหล่านี้คืออะไร? สิ่งที่ฉันคิด / พยายามเปรียบเทียบคำเหล่านี้ : คลาสไดอะแกรมไม่ใช่รูปแบบของสถาปัตยกรรมระบบเนื่องจากคำอธิบายข้างต้น ( structure, behavior, and more views of a system) บอกเป็นนัยว่าไม่มีรายละเอียดการนำไปปฏิบัติในสถาปัตยกรรมในขณะที่แผนภาพคลาสอธิบายถึงการนำไปปฏิบัติและอาจเป็นไปในทิศทางของการออกแบบมากกว่าสถาปัตยกรรม? ฉันคิดว่าสถาปัตยกรรมของระบบเป็นสถาปัตยกรรมที่มีการโต้ตอบภายนอก (เช่นฐานข้อมูล) ในขณะที่สถาปัตยกรรมซอฟต์แวร์มุ่งเน้นไปที่แอปพลิเคชันเอง

1
บริการ REST เป็นแอปพลิเคชันเซิร์ฟเวอร์สำหรับเครื่องไคลเอนต์ 2000+ เครื่อง มันเป็นความคิดที่ดีหรือไม่?
เราจะสร้างระบบด้วย UI ใน javaFx ที่จะนำไปใช้กับเครื่องมากกว่า 2000 เครื่อง (ขั้นต่ำคือ 2000 แต่จะมีมากขึ้น - สามารถเข้าถึงเครื่องได้ 5,000 เครื่อง) ด้วยเหตุผล / ข้อ จำกัด อื่น ๆ จะต้องติดตั้งบนเครื่องดังนั้นเราจึงไม่สามารถทำได้ด้วยเว็บเบราว์เซอร์อินเตอร์เฟส เครื่องจักรกว่า 2,000 เครื่องจะอยู่ในกลุ่มที่ตั้งทางภูมิศาสตร์ที่แตกต่างกัน โดยทั่วไปแล้วการเชื่อมต่อนั้นดี แต่อาจไม่ดีในสถานที่ห่างไกล แทนที่จะเข้าถึงฐานข้อมูลโดยตรงฉันกำลังคิดถึงการสร้างคลัสเตอร์เซอร์วิส REST ด้วย Spring + Spring Boot + Spring Data (java) เซอร์วิส REST จะยอมรับและส่งคืน Json ฉันคิดว่ามันเป็นความคิดที่ดีเพราะ: บริการจะทำหน้าที่เป็นกลุ่มการเชื่อมต่อฐานข้อมูล (ฉันคิดว่าการเชื่อมต่อ 2000+ บนฐานข้อมูลอาจทำให้เกิดปัญหา); เป็นไปได้ที่จะมีฐานข้อมูลพร้อมบันทึกการจัดส่งไปยังฐานข้อมูลแบบอ่านอย่างเดียวอื่น ๆ มันจะขยายขนาดได้ดีขึ้นเนื่องจากเราสามารถเพิ่มเครื่องจักรให้ทำงานบริการ REST …
11 java  design  rest  spring 

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

3
วิธีการตรวจสอบอินพุตโดยไม่มีข้อยกเว้นหรือความซ้ำซ้อน
เมื่อฉันพยายามสร้างส่วนต่อประสานสำหรับโปรแกรมเฉพาะฉันมักจะพยายามหลีกเลี่ยงการโยนข้อยกเว้นที่ขึ้นอยู่กับอินพุตที่ไม่ผ่านการตรวจสอบ ดังนั้นสิ่งที่มักจะเกิดขึ้นคือฉันคิดว่าโค้ดบางส่วนเช่นนี้ (นี่เป็นเพียงตัวอย่างเพื่อประโยชน์ของตัวอย่างไม่ต้องสนใจฟังก์ชั่นที่ใช้งานตัวอย่างใน Java): public static String padToEvenOriginal(int evenSize, String string) { if (evenSize % 2 == 1) { throw new IllegalArgumentException("evenSize argument is not even"); } if (string.length() >= evenSize) { return string; } StringBuilder sb = new StringBuilder(evenSize); sb.append(string); for (int i = string.length(); i < evenSize; i++) …

2
การแยกตรรกะทางธุรกิจออกจาก DB- ตรรกะด้วยธุรกรรม
เรามีสามชั้นในใบสมัครของเรา ชั้นบริการเพื่อให้ API ภายนอก เลเยอร์ BO สำหรับตรรกะทางธุรกิจของเราและเลเยอร์ DAO สำหรับการเชื่อมต่อฐานข้อมูลของเรา สมมติว่าทุกครั้งที่เราอัปเดตไฟล์เราต้องการเปลี่ยนบางอย่างในโฟลเดอร์เช่น 'วันที่แก้ไขล่าสุด' ต้องทำสิ่งนี้ในการทำธุรกรรม อาจประสบความสำเร็จและทั้งไฟล์และโฟลเดอร์ได้รับการแก้ไข หรือมีความล้มเหลวและธุรกรรมได้รับการย้อนกลับดังนั้นวัตถุทั้งสองอยู่ในสถานะก่อนหน้า "แก้ไขโฟลเดอร์เมื่อไฟล์ได้รับการแก้ไข" - ปฏิกิริยาเป็นตรรกะทางธุรกิจอย่างแท้จริง นี่ก็หมายความว่ามันอยู่ในเลเยอร์ BO อย่างไรก็ตามเราใช้ Objectify สำหรับฐานข้อมูลของเราดังนั้นในการเริ่มต้นธุรกรรมที่เราต้องเรียก ofy (). transact (... ) ถ้าเราเรียกใช้ฟังก์ชันนี้ในเลเยอร์ BO สิ่งนี้จะหยุดการออกแบบของเราเนื่องจากจะมีการเรียกเฉพาะฐานข้อมูล (Objectify) ในชั้นธุรกิจของเรา อะไรจะเป็นทางออกที่สะอาดสำหรับปัญหานี้

5
การออกแบบที่ดีคืออะไรเพื่อหลีกเลี่ยงการขอประเภทรอง
ฉันได้อ่านว่าเมื่อโปรแกรมของคุณจำเป็นต้องรู้ว่าคลาสคืออะไรวัตถุมักจะบ่งบอกถึงข้อบกพร่องในการออกแบบดังนั้นฉันจึงต้องการที่จะรู้ว่าอะไรคือวิธีปฏิบัติที่ดีในการจัดการกับสิ่งนี้ ฉันกำลังใช้รูปร่างคลาสที่มีคลาสย่อยต่าง ๆ ซึ่งสืบทอดมาจากมันเช่นวงกลมโพลีกอนหรือสี่เหลี่ยมผืนผ้าและฉันได้อัลกอริธึมที่แตกต่างกันเพื่อทราบว่าวงกลมชนกับรูปหลายเหลี่ยมหรือสี่เหลี่ยมผืนผ้า จากนั้นสมมติว่าเรามีสองอินสแตนซ์ของรูปร่างและต้องการทราบว่าหนึ่งชนกันในวิธีที่ฉันจะอนุมานประเภท subclass เป็นวัตถุที่ฉันกำลังชนกันเพื่อที่จะรู้ว่าอัลกอริทึมที่ฉันควรจะเรียก แต่นี่คือ การออกแบบหรือการปฏิบัติที่ไม่ดี? นี่คือวิธีที่ฉันแก้ไขมัน abstract class Shape { ShapeType getType(); bool collide(Shape other); } class Circle : Shape { getType() { return Type.Circle; } bool collide(Shape other) { if(other.getType() == Type.Rect) { collideCircleRect(this, (Rect) other); } else if(other.getType() == Type.Polygon) { collideCirclePolygon(this, (Polygon) other); …

7
การใช้งานสถานะวัตถุในภาษา OO?
ฉันได้รับรหัส Java เพื่อดูซึ่งจำลองการแข่งรถซึ่งรวมถึงการใช้เครื่องรัฐขั้นพื้นฐาน นี่ไม่ใช่เครื่องคำนวณทางวิทยาศาสตร์คอมพิวเตอร์แบบดั้งเดิม แต่เป็นเพียงวัตถุที่มีหลายสถานะและสามารถสลับระหว่างสถานะต่าง ๆ ตามชุดการคำนวณ เพื่ออธิบายเพียงแค่ปัญหาฉันมีคลาสรถยนต์พร้อมคลาส enum ซ้อนกันซึ่งกำหนดค่าคงที่สำหรับสถานะของรถยนต์ (เช่น OFF, IDLE, DRIVE, REVERSE และอื่น ๆ ) ภายในคลาสรถยนต์เดียวกันนี้ฉันมีฟังก์ชั่นการอัปเดตซึ่งโดยทั่วไปประกอบด้วยคำสั่งสวิตช์ขนาดใหญ่ซึ่งเปลี่ยนสถานะปัจจุบันของรถยนต์ทำการคำนวณบางอย่างและเปลี่ยนสถานะรถยนต์ เท่าที่ฉันเห็นรัฐ Cars ใช้ในชั้นเรียนของตัวเองเท่านั้น คำถามของฉันคือนี่เป็นวิธีที่ดีที่สุดในการจัดการกับการใช้งานกลไกสถานะตามธรรมชาติที่อธิบายไว้ข้างต้นหรือไม่? มันฟังดูเหมือนโซลูชันที่ชัดเจนที่สุด แต่ก่อนหน้านี้ฉันเคยได้ยินมาเสมอว่า ปัญหาหลักที่ฉันเห็นที่นี่คือคำสั่ง switch อาจมีขนาดใหญ่มากเมื่อเราเพิ่มสถานะเพิ่มเติม (ถ้าจำเป็น) และรหัสอาจไม่สะดวกและยากต่อการบำรุงรักษา อะไรจะเป็นทางออกที่ดีกว่าสำหรับปัญหานี้?

1
สถาปัตยกรรมหัวหอมกับสถาปัตยกรรม 3 ชั้น
ฉันเห็นเฉพาะประโยชน์ของสถาปัตยกรรมหัวหอมเหนือสถาปัตยกรรม 3 ชั้นที่ BL มีความรับผิดชอบในการเรียกใช้เมธอดบน DAL (หรืออินเตอร์เฟสของ DAL) เพื่อทำ CRUD หัวหอมมีการแยกความกังวลการทดสอบการบำรุงรักษาที่ดีขึ้นและสะอาดขึ้น ดังนั้นสถาปัตยกรรมหัวหอมจึงดีกว่าในทุกด้านและสถาปัตยกรรมแบบ 3 ชั้นเป็นเพียงวิธีเก่า ๆ ในการทำสิ่งต่าง ๆ หรือมีบางสถานการณ์ที่ฉันควรจะใช้สถาปัตยกรรมแบบ 3 ชั้นถ้าเป็นเช่นนั้น

1
Enum มีคุณสมบัติบูลีนมากมาย
ขณะนี้ฉันกำลังทำงานกับ webapp ซึ่งเรามักจะต้องกำหนดเงื่อนไขของเซิร์ฟเวอร์บางอย่างโดยอิงจากหน้าเว็บที่จะถูกส่งคืนให้กับผู้ใช้ แต่ละหน้าจะได้รับรหัสหน้า 4 ตัวอักษรและรหัสหน้าเหล่านี้มีการระบุไว้ในชั้นเรียนเป็นสตริงคงที่: public class PageCodes { public static final String FOFP = "FOFP"; public static final String FOMS = "FOMS"; public static final String BKGD = "BKGD"; public static final String ITCO = "ITCO"; public static final String PURF = "PURF"; // etc.. } และบ่อยครั้งที่ในโค้ดเราเห็นโค้ดลักษณะนี้ ( …
11 java  design  enum 

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