วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

1
ฉันควรใช้คำสั่งหรือเหตุการณ์หรือไม่?
ความแตกต่างระหว่างคำสั่งและเหตุการณ์ในการสื่อสารรถบัสนั้นค่อนข้างคลุมเครือสำหรับฉัน ฉันรู้ว่าควรดำเนินการคำสั่งเพียงครั้งเดียวในขณะที่เหตุการณ์สามารถจัดการได้หลายครั้ง แต่ฉันก็ยังไม่แน่ใจว่าจะใช้คำสั่งหรือเหตุการณ์เมื่อใด ลองดูตัวอย่าง: เมื่อผู้ใช้ใหม่ลงทะเบียนกับเว็บแอปพลิเคชันเราควรสร้างบัญชีให้เขาและส่งอีเมลยืนยัน การสร้างบัญชี - นี่เป็นจุดที่เหมาะสมในการส่งCreateUserCommandรถบัสและให้ส่วนประกอบเฉพาะจัดการ หรือบางทีสิ่งนี้ไม่ควรนำมาใช้กับการสื่อสารบัสแบบอะซิงโครนัส? เราต้องการให้ผู้ใช้ ba สามารถล็อกอินเข้าสู่แอปพลิเคชันได้ทันที ด้วยรถบัสเราไม่รับประกันว่าคำสั่งจะถูกดำเนินการเมื่อใด การส่งอีเมล - หลังจากส่วนประกอบสร้างบัญชีฉันสามารถเห็นความเป็นไปได้ 2 อย่าง ส่งคำสั่งอื่นไปที่รถบัส SendConfirmationEmailCommand เผยแพร่กิจกรรม UserAccountCreatedEvent และปล่อยให้องค์ประกอบของผู้ส่งอีเมลคว้ามันและมันเป็นงาน ในอีกด้านหนึ่งฉันต้องการอีเมลยืนยันที่จะส่งเพียงครั้งเดียวเท่านั้น (ใช้คำสั่ง) ในทางกลับกันฉันเชื่อว่าอาจมีหลายองค์ประกอบที่สนใจในผู้ใช้ที่ลงทะเบียนใหม่ คนตัดไม้หรือผู้ส่ง SMS คุณจะใช้มันอย่างไร?

5
มันโอเคที่จะต่อต้านการตั้งชื่อตัวพิมพ์ใหญ่ทั้งหมดสำหรับ enums เพื่อให้การแสดงสตริงของพวกเขาง่ายขึ้นหรือไม่?
หลายครั้งที่ฉันเห็นคนใช้ตัวพิมพ์ชื่อเรื่องหรือแม้แต่การตั้งชื่อตัวพิมพ์เล็กทั้งหมดสำหรับค่าคงที่ enum ตัวอย่างเช่น: enum Color { red, yellow, green; } สิ่งนี้ทำให้การทำงานกับสตริงเป็นเรื่องง่ายและง่ายthrow new IllegalStateException("Light should not be " + color + ".")ตัวอย่างเช่นถ้าคุณต้องการทำ ดูเหมือนว่าจะยอมรับได้มากกว่านี้ถ้า Enum เป็นprivateแต่ฉันก็ยังไม่ชอบ ฉันรู้ว่าฉันสามารถสร้างตัวสร้าง enum ด้วยเขตข้อมูล String แล้วแทนที่ toString เพื่อคืนชื่อดังกล่าวดังนี้ enum Color { RED("red"), YELLOW("yellow"), GREEN("green"); private final String name; private Color(String name) { this.name = name } @Override …
14 java  conventions  enum 

5
คุณจะจัดการเวอร์ชันในโครงการหลายด้านได้อย่างไร
ฉันรู้ว่ามันเป็นคำถามกว้าง ๆ ดังนั้นฉันจะพยายามเจาะจงให้มากที่สุดเท่าที่จะทำได้ คำถามนี้เป็นคำถาม "องค์กร" มากกว่าคำถามทางเทคนิค เรามีโครงการหลายด้านที่มีองค์ประกอบหลักเหล่านี้: เซิร์ฟเวอร์ที่โฮสต์ตรรกะทางธุรกิจหลัก (ตัวแบบข้อมูล) BackOffice สำหรับลูกค้าที่ใช้ตรรกะทางธุรกิจหลัก แอปพลิเคชัน API (REST) ​​ซึ่งใช้ตรรกะทางธุรกิจหลักเช่นกัน มีแอพสมาร์ทโฟน (iOS และ Android) โดยใช้แอปพลิเคชัน API มีแอปแท็บเล็ตอีกแอนดรอยด์ที่แตกต่างจากสมาร์ทโฟนที่ใช้แอปพลิเคชัน API เดียวกัน เร็ว ๆ นี้ฉันจะอยู่ในการผลิตกับลูกค้าที่ใช้งานอยู่ และเป็นโครงการใด ๆ ฉันจะต้องบำรุงรักษาส่วนประกอบต่าง ๆ ทั้งหมดในช่วงเวลา นั่นหมายความว่าสามารถอัปเกรดทั้งหมดต่อไปนี้: รหัสของตรรกะทางธุรกิจหลักในเซิร์ฟเวอร์ (ใช้โดย back-office, API และผลข้างเคียงจากแอปมือถือ) API เอง (ใช้ทั้งแอพสมาร์ทโฟนและแท็บเล็ต) แอพมือถือทั้งหมด (ผ่าน appstore / googleplay) แน่นอนส่วนฝั่งเซิร์ฟเวอร์ (รหัสตรรกะทางธุรกิจหลักและรหัส API) สามารถเปลี่ยนแปลงได้ทันทีด้วยตัวเอง …

4
ใช้การจัดองค์ประกอบและการสืบทอดสำหรับ DTO
เรามี ASP.NET Web API ที่ให้บริการ REST API สำหรับแอปพลิเคชันหน้าเดียวของเรา เราใช้ DTOs / POCO เพื่อส่งผ่านข้อมูลผ่าน API นี้ ปัญหาคือตอนนี้ DTO เหล่านี้เริ่มใหญ่ขึ้นตามกาลเวลาดังนั้นตอนนี้เราต้องการที่จะปรับโครงสร้าง DTO อีกครั้ง ฉันกำลังมองหา "วิธีปฏิบัติที่ดีที่สุด" วิธีการออกแบบ DTO: ขณะนี้เรามี DTO ขนาดเล็กที่ประกอบด้วยเฉพาะเขตข้อมูลประเภทค่าเช่น: public class UserDto { public int Id { get; set; } public string Name { get; set; } } DTO อื่น ๆ ใช้ …
13 rest  api-design  web-api  dto  poco 

5
Pure Front End JavaScript พร้อม Web API กับ MVC views ด้วย ajax
นี่เป็นการถกเถียงกันมากขึ้นว่าวันนี้ประชาชนคิดอย่างไรกับการแยกเว็บแอพพลิเคชั่น ฉันคุ้นเคยกับการสร้างแอปพลิเคชัน MVC ด้วยมุมมองและตัวควบคุมทั้งหมด ปกติแล้วฉันจะสร้างมุมมองแบบเต็มและส่งผ่านสิ่งนี้กลับไปยังเบราว์เซอร์บนคำขอเต็มหน้าเว้นแต่จะมีพื้นที่เฉพาะที่ฉันไม่ต้องการให้ปรากฏทันทีและจะใช้กิจกรรมโหลดหน้า DOM เพื่อเรียกเซิร์ฟเวอร์เพื่อโหลดพื้นที่อื่น ใช้ AJAX นอกจากนี้เมื่อมีการรีเฟรชหน้าบางส่วนฉันจะเรียกวิธีการดำเนินการ MVC ซึ่งจะคืนค่าส่วนย่อย HTML ซึ่งฉันสามารถใช้เพื่อเติมข้อมูลบางส่วนของหน้า นี่จะเป็นพื้นที่ที่ฉันไม่ต้องการชะลอการโหลดหน้าเริ่มต้นหรือพื้นที่ที่เหมาะกับการโทร AJAX ตัวอย่างหนึ่งจะใช้สำหรับเพจจิ้งตาราง หากคุณต้องการไปยังหน้าถัดไปฉันจะชอบถ้าการโทร AJAX ได้รับข้อมูลนั้นแทนที่จะใช้การรีเฟรชหน้าเต็ม แต่การโทร AJAX จะยังคงส่งคืน HTML ส่วน คำถามของฉันคือ ความคิดของฉันเกี่ยวกับโบราณนี้เพราะฉันมาจากพื้นหลัง. net มากกว่าพื้นหลังส่วนหน้าบริสุทธิ์หรือไม่ นักพัฒนาส่วนหน้าอัจฉริยะที่ฉันทำงานด้วยชอบทำอะไรมากหรือน้อยในมุมมอง MVC และอยากทำทุกอย่างที่ส่วนหน้า ขวาไปที่การโทรผ่านเว็บ API เพื่อใส่ข้อมูลในหน้า ดังนั้นแทนที่จะเรียกวิธีการดำเนินการ MVC ซึ่งส่งคืน HTML เขาต้องการที่จะส่งคืนวัตถุมาตรฐานและใช้จาวาสคริปต์เพื่อสร้างองค์ประกอบทั้งหมดของหน้า วิธีการพัฒนาส่วนหน้าหมายความว่าคุณจะได้รับประโยชน์ใด ๆ ที่ฉันได้รับจากการตรวจสอบรุ่นของ MVC รวมถึงการตรวจสอบด้านลูกค้า นอกจากนี้ยังหมายความว่าคุณจะได้รับประโยชน์ใด ๆ จากการสร้างมุมมองด้วยเทมเพลต html ที่พิมพ์อย่างมากและจะหายไป …

5
ทำไมผลลัพธ์ของคอมไพเลอร์จึงเรียกว่า object code?
จากบทความการเขียนโปรแกรมภาษาอธิบายโดย Paul Graham เผยแพร่ในแฮกเกอร์ & จิตรกร : ภาษาระดับสูงที่คุณกินคอมไพเลอร์ยังเป็นที่รู้จักกันเป็น รหัสที่มาและการแปลภาษาเครื่องจะสร้างเรียกว่ารหัสวัตถุ จากบทความ Wikipedia เกี่ยวกับรหัสวัตถุ : รหัสวัตถุหรือบางครั้งวัตถุโมดูลคือสิ่งที่คอมไพเลอร์คอมพิวเตอร์ผลิต จากคำจำกัดความของ 'คอมไพเลอร์' : ตามเนื้อผ้าเอาท์พุทของการรวบรวมได้รับการเรียกว่ารหัสวัตถุหรือบางครั้งโมดูลวัตถุ (โปรดทราบว่าคำว่า "object" ที่นี่ไม่เกี่ยวข้องกับการเขียนโปรแกรมเชิงวัตถุ) ดังนั้นสิ่งที่เป็นวัตถุระยะที่เกี่ยวข้องกับ?

2
จริงหรือไม่ที่“ โปรแกรมเมอร์จริงสามารถเขียนรหัสประกอบเป็นภาษาใด ๆ ได้”?
โปรแกรมเมอร์จริงสามารถเขียนรหัสประกอบในภาษาใด ๆ (Larry Wall) เท่าที่ฉันจะทำได้ Mr. Larry Wall พยายามพูดกับโปรแกรมเมอร์จริง ๆ ว่าภาษาใดก็ตามที่มีฟังก์ชันการทำงานเหมือนกับ ASM แต่ฉันไม่เข้าใจอย่างจริงจัง คุณจะเขียนโค้ดชุดประกอบในภาษาระดับสูงเช่น Perl, Python, Java และ C # ได้อย่างไร ภาษาอย่าง Perl และ Python ไม่มีแม้แต่พอยน์เตอร์ หรือเขาหมายถึงอย่างอื่น? นายวอลล์พยายามพูดอะไรจริงๆ

8
ประวัติย่อของโปรแกรมเมอร์ที่สอนด้วยตนเอง / ไม่มีประสบการณ์เป็นอย่างไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันถามคำถามซักครู่เกี่ยวกับการรู้ว่าเมื่อคุณพร้อมที่จะหางานและได้รับคำตอบในเชิงบวก ตอนนี้ฉันกำลังเขียนเรซูเม่เพื่อเริ่มต้นการค้นหางานของฉัน ชื่อเรื่องค่อนข้างจะเป็นคำถามสรุปโปรแกรมเมอร์ที่เรียนรู้ด้วยตนเองควรมีอะไรบ้างนอกจากประสบการณ์ในโครงการส่วนบุคคลที่ควรนำมาเล่าต่อ PS สิ่งที่ฉันต้องการถามจริงๆคือสำหรับคนที่จะดูประวัติย่อของฉันอย่างรวดเร็วแต่ฉันรู้ว่านี่เฉพาะเจาะจงเกินไป มีสถานที่ที่ฉันสามารถถามคำถามประเภทนี้หรือไม่? แก้ไข:ขอบคุณทุกคนสำหรับความคิดเห็น ฉันเสร็จรุ่น RC และหวังว่าจะได้เข้าสู่ตลาดงานในไม่ช้า
13 resume 

3
การใช้มาโคร C / C ++ เป็นทางลัดสำหรับการคอมไพล์แบบมีเงื่อนไขหรือไม่?
สมมติว่าฉันต้องการมีข้อความเอาต์พุตหลายประเภทในรหัสของฉัน หนึ่งในนั้นคือDEBUGซึ่งจะถูกพิมพ์เท่านั้นเมื่อรวบรวมรหัสในโหมด Debug โดยปกติฉันจะต้องเขียนบางอย่างเช่น #ifdef DEBUG std::cout << "Debug message" << std::endl; #endif ซึ่งค่อนข้างยุ่งยากและน่ารำคาญในหลาย ๆ ที่ เป็นวิธีปฏิบัติที่ดีในการกำหนดแมโครสำหรับข้อมูลโค้ดดังนั้นคุณจะใช้วิธีนี้หรือไม่ MSG_DEBUG("Debug message") หรือมีวิธีอื่นที่สวยงามกว่าวิธีจัดการกับมันโดยไม่มีมาโคร ฉันสนใจโซลูชันที่เป็นไปได้ทั้งใน C และ C ++ เนื่องจากฉันใช้ทั้งสองภาษาในโครงการที่แตกต่างกัน
13 c++  c  macros 

7
การบันทึกเหตุการณ์ความถี่สูงไปยังฐานข้อมูลที่ จำกัด การเชื่อมต่อ
เรามีสถานการณ์ที่ฉันต้องรับมือกับเหตุการณ์ที่ไหลเข้ามาในเซิร์ฟเวอร์ของเราโดยเฉลี่ยประมาณ 1,000 เหตุการณ์ต่อวินาทีโดยเฉลี่ย ปัญหา ระบบของเราโฮสต์บนHerokuและใช้Heroku Postgres DBที่ค่อนข้างแพงซึ่งอนุญาตการเชื่อมต่อ DB ได้สูงสุด 500 เราใช้การเชื่อมต่อร่วมกันเพื่อเชื่อมต่อจากเซิร์ฟเวอร์ไปยังฐานข้อมูล เหตุการณ์เข้ามาเร็วกว่าการเชื่อมต่อฐานข้อมูลที่สามารถจัดการได้ ปัญหาที่เรามีคือเหตุการณ์เกิดขึ้นเร็วกว่าพูลการเชื่อมต่อที่สามารถจัดการได้ เมื่อถึงเวลาที่การเชื่อมต่อหนึ่งเสร็จสิ้นการส่งสัญญาณเครือข่ายจากเซิร์ฟเวอร์ไปยังฐานข้อมูลดังนั้นจึงสามารถปล่อยกลับไปที่กลุ่มได้มากกว่าnมีเหตุการณ์เพิ่มเติมเข้ามา ในที่สุดเหตุการณ์ต่างๆก็หมดลงรอรับการบันทึกและเนื่องจากไม่มีการเชื่อมต่อที่พร้อมใช้งานในกลุ่มจึงหมดเวลาและระบบทั้งหมดไม่สามารถใช้งานได้ เราได้แก้ไขเหตุฉุกเฉินด้วยการปล่อยเหตุการณ์ความถี่สูงที่ก้าวร้าวช้าลงจากลูกค้า แต่เรายังต้องการทราบวิธีจัดการสถานการณ์นี้ในเหตุการณ์ที่เราต้องจัดการกับเหตุการณ์ความถี่สูงนั้น ข้อ จำกัด ลูกค้ารายอื่นอาจต้องการอ่านเหตุการณ์พร้อมกัน ไคลเอนต์อื่น ๆ ร้องขออย่างต่อเนื่องเพื่ออ่านเหตุการณ์ทั้งหมดที่มีคีย์เฉพาะแม้ว่าพวกเขาจะยังไม่ได้บันทึกในฐานข้อมูล ไคลเอนต์สามารถสอบถามGET api/v1/events?clientId=1และรับเหตุการณ์ทั้งหมดที่ส่งโดยไคลเอนต์ 1 แม้ว่าเหตุการณ์เหล่านั้นจะยังไม่ได้ทำการบันทึกในฐานข้อมูล มีตัวอย่าง "ห้องเรียน" เกี่ยวกับวิธีจัดการกับเรื่องนี้หรือไม่? การแก้ปัญหาที่เป็นไปได้ จัดคิวเหตุการณ์บนเซิร์ฟเวอร์ของเรา เราสามารถจัดคิวเหตุการณ์บนเซิร์ฟเวอร์ (ด้วยคิวที่มีการเกิดพร้อมกันสูงสุด 400 เพื่อให้กลุ่มการเชื่อมต่อไม่หมด) นี่เป็นความคิดที่ไม่ดีเพราะ: มันจะกินหน่วยความจำเซิร์ฟเวอร์ที่มีอยู่ เหตุการณ์ที่จัดคิวเข้าด้วยกันจะใช้ RAM จำนวนมาก เซิร์ฟเวอร์ของเราเริ่มต้นใหม่ครั้งเดียวทุก 24 ชั่วโมง นี่เป็นข้อ จำกัด อย่างหนักจาก Heroku เซิร์ฟเวอร์สามารถรีสตาร์ทในขณะที่เหตุการณ์ถูกจัดคิวทำให้เราสูญเสียเหตุการณ์ที่จัดคิว มันแนะนำสถานะบนเซิร์ฟเวอร์จึงทำร้ายความยืดหยุ่น …

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

3
ใช้การตรวจสอบชนิดคงที่เพื่อป้องกันข้อผิดพลาดทางธุรกิจ
ฉันเป็นแฟนตัวยงของการตรวจสอบประเภทคงที่ มันป้องกันคุณจากการทำผิดพลาดแบบนี้: // java code Adult a = new Adult(); a.setAge("Roger"); //static type checker would complain a.setName(42); //and here too แต่มันไม่ได้ป้องกันคุณจากการทำผิดพลาดแบบนี้: Adult a = new Adult(); // obviously you've mixed up these fields, but type checker won't complain a.setAge(150); // nobody's ever lived this old a.setWeight(42); // a 42lb adult …

2
หากฉันล่าช้าที่จะยอมรับใบอนุญาตซอฟต์แวร์ให้กับ repo ก่อนหน้านี้ทุกคนต่างผูกมัดกับไลเซนส์หรือไม่?
สมมติว่าฉันมีโครงการส่วนตัวที่มี 100 สัญญา ฉันไม่ได้เพิ่มใบอนุญาตซอฟต์แวร์จนกว่าจะถึง 101 ถ้าฉันทำให้โครงการโอเพนซอร์สนั่นหมายความว่า 100 คอมมิชชันแรกทั้งหมดไม่ได้ถูกผูกมัดโดยสิทธิ์การใช้งานซอฟต์แวร์ในการยืนยันที่ 101 โครงการควรจะถูกปฏิเสธเมื่อมีการเพิ่มใบอนุญาตหรือไม่?

4
คุณสามารถ TDD สำหรับข้อบกพร่องที่สามารถทดสอบได้หลังจากที่ได้รับการแก้ไขแล้วเท่านั้น?
นี่คือตัวอย่างหนึ่ง: เว็บแอปพลิเคชันของฉันมีองค์ประกอบที่สามารถลากได้ เมื่อลากองค์ประกอบเบราว์เซอร์จะสร้าง "ภาพผี" ฉันต้องการลบ "อิมเมจโกสต์" เมื่อลากแล้วเขียนการทดสอบสำหรับพฤติกรรมนี้ ปัญหาของฉันคือตอนแรกฉันไม่รู้ว่าจะแก้ไขข้อผิดพลาดนี้ได้อย่างไรและวิธีเดียวที่ฉันสามารถเขียนการทดสอบคือหลังจากที่ฉันแก้ไขแล้ว ในฟังก์ชั่นง่าย ๆ เช่นlet sum = (a, b) => a - bคุณสามารถเขียนการทดสอบว่าทำไมsum(1, 2)ไม่เท่ากัน3ก่อนที่จะเขียนโค้ดใด ๆ ในกรณีที่ฉันอธิบายฉันไม่สามารถทดสอบได้เพราะฉันไม่ทราบว่าการตรวจสอบคืออะไร (ฉันไม่รู้ว่าการยืนยันควรเป็นอย่างไร) วิธีแก้ไขปัญหาที่อธิบายคือ: let dataTransfer = e.dataTransfer let canvas = document.createElement('canvas'); canvas.style.opacity = '0'; canvas.style.position = 'absolute'; canvas.style.top = '-1000px'; dataTransfer.effectAllowed = 'none'; document.body.appendChild(canvas); dataTransfer.setDragImage(canvas, 0, 0); ฉันไม่สามารถรู้ได้ว่านี่เป็นวิธีแก้ปัญหา ฉันไม่สามารถเขียนแบบทดสอบได้หลังจากหาวิธีแก้ปัญหาออนไลน์เพราะวิธีเดียวที่ฉันจะรู้ได้ถ้ามันใช้งานได้จริงก็คือการเพิ่มรหัสนี้ลงใน …

2
สแต็กขยาย LinkedList การละเมิดหลักการทดแทน Liskov หรือไม่?
คลาส LinkedList มีอยู่พร้อมกับฟังก์ชั่นเช่น add_first (), add_last (), add_after (), remove_first (), remove_last () และ remove () ขณะนี้มีคลาสสแต็กที่จัดเตรียมฟังก์ชันการใช้งานเช่น push (), pop (), peek () หรือ top () และเพื่อใช้เมธอดเหล่านี้จะขยายเมธอดคลาส LinkedList นี่เป็นการละเมิดหลักการทดแทนของ Liskov หรือไม่? ตัวอย่างเช่นพิจารณา case add_after () เพื่อเพิ่มโหนดที่ตำแหน่งที่ n ของรายการที่เชื่อมโยง สามารถทำได้ในคลาสพื้นฐาน แต่ไม่สามารถอยู่ในคลาสสแต็กได้ postconditions ถูกทำให้อ่อนลงที่นี่หรือคุณปรับเปลี่ยนวิธี add_after () เพื่อเพิ่มไปยังด้านบนสุดของสแต็กหรือไม่ นอกจากนี้หากไม่เป็นการละเมิดการออกแบบที่ไม่ดีนี้เป็นอย่างไร และคุณจะใช้ฟังก์ชั่น Stack โดยใช้คลาส LinkedList …

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