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

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

8
จะมี 4 สถานะต่อ "บิต" มากกว่า 2 หมายถึงพื้นที่เก็บข้อมูลสองเท่าหรือไม่
พื้นฐานที่ค่อนข้างตรงไปตรงมาแม้ว่าจะไร้เดียงสาคำถาม: จะมี 4 สถานะต่อ "บิต" มากกว่า 2 หมายความว่าพื้นที่เก็บข้อมูลสองเท่าหรือไม่ ในกรณีที่ไม่ชัดเจนฉันหมายถึงราวกับว่า "โครงสร้างการจัดเก็บ" ทุกครั้งแทนที่จะเป็นเพียง 2 ค่า (ฐาน 2: 0, 1) สามารถแสดงค่าได้ 4 ค่า (ฐาน 4: 0, 1, 2, 3 )
35 data  storage 

8
การกำหนดในส่วนของเงื่อนไขเป็นเงื่อนไขที่ไม่ดีหรือไม่?
สมมติว่าฉันต้องการเขียนฟังก์ชันที่เชื่อมสองสายเข้าด้วยกันใน C วิธีที่ฉันจะเขียนคือ: void concat(char s[], char t[]){ int i = 0; int j = 0; while (s[i] != '\0'){ i++; } while (t[j] != '\0'){ s[i] = t[j]; i++; j++; } s[i] = '\0'; } อย่างไรก็ตามK&Rในหนังสือของพวกเขามีการใช้งานที่แตกต่างกันโดยเฉพาะอย่างยิ่งรวมถึงสภาพของลูปในขณะที่มากที่สุด: void concat(char s[], char t[]){ int i, j; i = j = 0; …

8
เมื่อไหร่ที่เราจะใช้การเขียนโปรแกรมเชิงวัตถุ? [ปิด]
ฉันกำลังเขียนโปรแกรมใน Python ซึ่งโดยทั่วไปจะจัดการกับสตริงและฉันสงสัยว่าฉันควรทำโดยใช้หลักการ OOP หรือไม่ ลูกค้าไม่บอกผมว่าเขาไม่ได้ดูแลเกี่ยวกับรหัสที่เขาต้องการเพียงแค่สิ่งที่ทำ ฉันรู้ว่ารหัสเชิงวัตถุไม่ได้โดยการทำความสะอาดคำนิยามและในทางกลับกันโค้ดที่ไม่ใช่ OO ไม่ได้เป็นคำจำกัดความที่เสแสร้ง คำถามที่ฉันถามอาจมีพื้นฐานจากความคิดเห็นไม่มากก็น้อย แต่อาจมีกฎบางอย่างที่ฉันไม่ทราบ ข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่ต้องทำ: แยก.csvไฟล์และประมวลผลข้อมูลตามไฟล์ปรับแต่ง (คอลัมน์อาจแตกต่างกัน - เช่นในจำนวนคอลัมน์หรือข้อมูลที่เก็บ) ใช้ข้อมูลที่ประมวลผลข้างต้นเพื่อสร้างข้อมูลที่จัดรูปแบบใหม่ที่กำหนดเอง (หรือหลายไฟล์ตามค่าข้างต้น) ใช้ข้อมูลที่จัดรูปแบบล่าสุดเพื่อสร้างไฟล์ XML แบ่งไฟล์ XML เป็นหลาย ๆ ไฟล์XMLตามเนื้อหา แอปพลิเคชันควรเป็นแบบ CLI มีสิ่งอื่น ๆ ที่แน่นอนเช่น: การบันทึกเหตุการณ์บางอย่างอาร์กิวเมนต์แยกวิเคราะห์ CLI และอื่น ๆ ตอนนี้มันไม่ได้เป็นแอพพลิเคชั่นขนาดใหญ่ / หนักและมันก็เกือบจะเสร็จสิ้นแล้ว แต่ในระหว่างกระบวนการพัฒนาทั้งหมดฉันก็ถามตัวเองว่าควรจะใช้ OOP หรือไม่ ดังนั้นคำถามของฉันคือ: คุณรู้จัก / ตัดสินใจว่าจะใช้ OOPในแอปพลิเคชันได้อย่างไร

2
Rust แตกต่างจากสิ่งอำนวยความสะดวกในการทำงานพร้อมกันของ C ++ อย่างไร
คำถาม ฉันพยายามที่จะเข้าใจว่าสนิมช่วยปรับปรุงพื้นฐานและพร้อมกันของสิ่งอำนวยความสะดวกในการทำงานพร้อมกันของ C ++ หรือไม่เพื่อที่จะตัดสินใจว่าฉันควรใช้เวลาในการเรียนรู้สนิมหรือไม่ โดยเฉพาะอย่างยิ่ง idiomatic Rust จะพัฒนาขึ้นอย่างไรหรือในอัตราที่ต่างกันอย่างไรสิ่งอำนวยความสะดวกที่เกิดขึ้นพร้อมกันของ C ++ การปรับปรุง (หรือความแตกต่าง) ส่วนใหญ่เกี่ยวกับการสร้างประโยคหรือเป็นการปรับปรุงที่สำคัญในกระบวนทัศน์หรือไม่? หรือมันเป็นอย่างอื่น? หรือไม่เป็นการปรับปรุงที่แท้จริง (divergence) เลยเหรอ? หลักการและเหตุผล ฉันเพิ่งพยายามสอนสิ่งอำนวยความสะดวกในการทำงานพร้อมกันของ C ++ 14 และมีบางสิ่งที่รู้สึกไม่ถูกต้อง บางสิ่งบางอย่างรู้สึกปิด สิ่งที่รู้สึกออก? ยากที่จะพูด. รู้สึกว่าคอมไพเลอร์ไม่ได้พยายามช่วยฉันในการเขียนโปรแกรมที่ถูกต้องเมื่อพูดถึงการทำงานพร้อมกัน รู้สึกราวกับว่าฉันกำลังใช้แอสเซมเบลอร์มากกว่าคอมไพเลอร์ เป็นที่ยอมรับกันว่าเป็นไปได้ทั้งหมดที่ฉันยังต้องทนทุกข์ทรมานจากแนวคิดที่บอบบางและผิดพลาดเมื่อมันเกิดขึ้นพร้อมกัน บางทีฉันอาจจะยังไม่เห็นความตึงเครียดของ Bartosz Milewski ระหว่างการเขียนโปรแกรมแบบรัฐและการแข่งขันข้อมูล บางทีฉันอาจไม่เข้าใจว่ามีวิธีการทำงานพร้อมกันของเสียงในคอมไพเลอร์มากน้อยแค่ไหนและมันมีอยู่ในระบบปฏิบัติการเท่าใด
35 c++  concurrency  rust  c++14 

5
เมื่อใดที่ฉันควรขยายคลาส Java Swing
ความเข้าใจในปัจจุบันของฉันเกี่ยวกับการใช้งานมรดกคือควรขยายชั้นเรียนเฉพาะเมื่อมีความสัมพันธ์แบบ IS-A หากคลาสพาเรนต์สามารถมีประเภทลูกที่เฉพาะเจาะจงเพิ่มเติมด้วยฟังก์ชันการทำงานที่แตกต่างกัน แต่จะแบ่งปันองค์ประกอบทั่วไปที่มีนามธรรมในผู้ปกครอง ฉันกำลังถามความเข้าใจนั้นเพราะสิ่งที่อาจารย์ Java ของฉันแนะนำให้เราทำ เขาแนะนำว่าสำหรับJSwingแอปพลิเคชันที่เรากำลังสร้างในชั้นเรียน หนึ่งควรขยายทุกJSwingชั้นเรียน ( JFrame, JButton, JTextBoxฯลฯ ) ในชั้นเรียนที่กำหนดเองแยกต่างหากและระบุ GUI การปรับแต่งที่เกี่ยวข้องในพวกเขา (เช่นขนาดส่วนประกอบฉลากส่วนประกอบ ฯลฯ ) จนถึงตอนนี้ดีมาก แต่เขาก็ยังแนะนำต่อไปว่า JButton ทุกคนควรมีคลาสแบบขยายที่กำหนดเองของตนเองแม้ว่าปัจจัยที่แตกต่างเท่านั้นคือฉลากของพวกเขา สำหรับเช่นหาก GUI มีสองปุ่มโอเคและยกเลิก เขาแนะนำให้ขยายเวลาดังต่อไปนี้: class OkayButton extends JButton{ MainUI mui; public OkayButton(MainUI mui) { setSize(80,60); setText("Okay"); this.mui = mui; mui.add(this); } } class CancelButton extends JButton{ …

7
ข้อโต้แย้งต่อต้านการปราบปรามข้อผิดพลาด
ฉันพบโค้ดบางส่วนในโครงการของเรา: SomeClass QueryServer(string args) { try { return SomeClass.Parse(_server.Query(args)); } catch (Exception) { return null; } } เท่าที่ฉันเข้าใจการระงับข้อผิดพลาดเช่นนี้เป็นการปฏิบัติที่ไม่ดีเนื่องจากเป็นการทำลายข้อมูลที่เป็นประโยชน์จากข้อยกเว้นของเซิร์ฟเวอร์ดั้งเดิมและทำให้รหัสดำเนินการต่อเมื่อควรยุติ เมื่อใดที่เหมาะสมที่จะระงับข้อผิดพลาดทั้งหมดเช่นนี้

9
มันสมเหตุสมผลหรือไม่ที่จะไม่เขียนการทดสอบหน่วยเพราะพวกเขามีแนวโน้มที่จะได้รับความเห็นในภายหลังหรือเพราะการทดสอบการรวมมีคุณค่ามากขึ้น?
ฉันกำลังถกหน่วย / บูรณาการทดสอบกับเพื่อนร่วมงานและเขาทำกรณีที่น่าสนใจกับการเขียนการทดสอบหน่วย ฉันเป็นผู้ทดสอบหน่วยใหญ่ (JUnit เป็นหลัก) ผู้เสนอ แต่ฉันสนใจที่จะรับฟังผู้อื่นในขณะที่เขาทำประเด็นที่น่าสนใจ เพื่อสรุปคะแนนของเขา: เมื่อมีการเปลี่ยนแปลงรหัสสำคัญ (ชุด POJO ใหม่การปรับโครงสร้างแอปพลิเคชันหลัก ฯลฯ ) การทดสอบหน่วยมักจะถูกใส่ความคิดเห็นแทนการทำใหม่ เวลาที่ใช้ในการทดสอบแบบบูรณาการที่ดีขึ้นนั้นครอบคลุมถึงกรณีการใช้งานซึ่งทำให้การทดสอบที่มีขอบเขตน้อยลงมีความสำคัญน้อยลง คิดเกี่ยวกับเรื่องนี้? ฉันยังคงทดสอบแบบหน่วย (ตามที่ฉันเห็นอย่างต่อเนื่องว่ามันสร้างโค้ดที่ได้รับการปรับปรุง) แม้ว่าการทดสอบการรวมจะมีค่าอย่างน้อยก็มีค่า

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

2
ภาษาโปรแกรมแรกของ ATM
ตู้เอทีเอ็มเครื่องแรกทำหน้าที่เหมือนเครื่องจ่ายเงินสดพวกเขาเป็นเครื่องออฟไลน์ที่ทำงานกับบัตรเจาะที่ชุบด้วยคาร์บอนและรหัส PIN 6 หลัก การถอนสูงสุดด้วยบัตรคือ 10 ปอนด์และแต่ละใบเป็นบัตรใช้ครั้งเดียว - บัตรเอทีเอ็มกลืน! ตู้เอทีเอ็มเครื่องแรกถูกติดตั้งในลอนดอนในปี 1967 เมื่อฉันดูที่เส้นเวลาของภาษาการเขียนโปรแกรมมีภาษาการเขียนโปรแกรมจำนวนมากที่สร้างขึ้นก่อนทศวรรษที่ผ่านมา ฉันไม่รู้เกี่ยวกับฮาร์ดแวร์เหมือนกัน แต่มันเขียนไว้ในภาษาโปรแกรมใด (ยังมีการใช้ฮาร์ดไดรฟ์ชนิดใด?) * ฉันไม่พบประวัติรายละเอียดของ John Shepherd-Barron (นักประดิษฐ์ ATM ที่อายุ 70 ​​ปี) ปรับปรุง ฉันพบภาพนี้ซึ่งนำมาจากหนังสือพิมพ์ย้อนหลังไปถึงปี 1972 ในอิหร่าน PS ที่แปล : แสดงให้เห็นว่านาย Rad-lon (ถ้าสะกดถูกต้อง)ผู้จัดการของ Barros (ถ้าสะกดถูกต้อง)สถาบันการศึกษานานาชาติในสหราชอาณาจักรทางด้านขวาและนาย Jim Sutherland - ผู้เชี่ยวชาญของซุ้มคอมพิวเตอร์ ในส่วนที่เหลือของข้อความที่ฉันพบในบทความนี้ตู้เอทีเอ็มประเภทนี้ซึ่งเรียกว่า "ตู้คอมพิวเตอร์อัตโนมัติ" ถูกโฆษณาด้วยโมโตนี้: Mr. Rad-lon (หากสะกดอย่างถูกต้อง) ให้นำบัตรของเขาไปยังที่ตั้งหนึ่งแห่งของ Automated Computer Kiosk …

6
ทำไมนักพัฒนาไม่ทำการติดตั้งอัตโนมัติบน windows? [ปิด]
นี่คือสิ่งที่ตรงกันข้ามกับ " ทำไมนักพัฒนาไม่ทำการติดตั้งตัวช่วยสร้างบน linux " ซึ่งน่าสนใจ แต่ทำให้ฉันคิดว่า "การติดตั้งอัตโนมัติเป็นวิธีที่เป็นธรรมชาติทำไมพวกเขาจึงใช้ตัวช่วยสร้าง" ดังนั้นนี่คือคำถามผกผัน: ฉันแน่ใจว่ามันไม่ได้เกี่ยวกับความเกียจคร้านหรืออะไรทำนองนั้น แต่ฉันไม่เข้าใจว่าทำไมนักพัฒนาของแอพที่ผู้บริโภคส่วนใหญ่หันมาใช้แอพไม่ทำการติดตั้งแบบอัตโนมัติเต็มรูปแบบที่คุณไม่ต้องกังวลเลย แอพเดียวกันมักติดตั้งอัตโนมัติบน Linux ดังนั้นทำไมไม่ใช้ Windows และ Mac OS มีเหตุผลทางเทคนิคสำหรับแนวโน้มนี้หรือเป็นเพียงแค่การประชุม?
35 windows 

6
วิธีที่ดีที่สุดในการเริ่มต้นการอ้างอิงของเด็กถึงผู้ปกครองคืออะไร
ฉันกำลังพัฒนาโมเดลวัตถุที่มีคลาสแม่ / ลูกที่แตกต่างกันจำนวนมาก แต่ละวัตถุลูกมีการอ้างอิงถึงวัตถุแม่ของมัน ฉันสามารถนึกถึง (และลอง) หลายวิธีในการเริ่มต้นการอ้างอิงผู้ปกครอง แต่ฉันพบข้อบกพร่องที่สำคัญสำหรับแต่ละวิธี ให้แนวทางที่อธิบายไว้ด้านล่างซึ่งดีที่สุด ... หรือสิ่งที่ดียิ่งขึ้น ฉันจะไม่ตรวจสอบว่ารหัสด้านล่างรวบรวมดังนั้นโปรดลองดูความตั้งใจของฉันถ้ารหัสไม่ถูกต้อง syntactically โปรดทราบว่าตัวสร้างคลาสลูกของฉันบางคนใช้พารามิเตอร์ (นอกเหนือจากแม่) แม้ว่าฉันจะไม่แสดงใด ๆ ผู้เรียกมีหน้าที่ตั้งค่าพาเรนต์และเพิ่มในพาเรนต์เดียวกัน class Child { public Child(Parent parent) {Parent=parent;} public Parent Parent {get; private set;} } class Parent { // singleton child public Child Child {get; set;} //children private List<Child> _children = new List<Child>(); …

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

7
การผสานที่มีความซับซ้อนบ่อยครั้งทำให้เกิดความขัดแย้งเป็นสัญญาณของปัญหาหรือไม่?
ในทีมของเราเราใช้ Git เป็นแหล่งควบคุมของเรา เรามีหลายส่วนของรหัสที่เกือบจะเป็นอิสระ แต่มีบางอย่างทับซ้อนกัน เมื่อเร็ว ๆ นี้เราได้พูดคุยเวิร์กโฟลว์และวิธีการใช้การควบคุมแหล่งที่มา การร้องเรียนหนึ่งเรื่องที่เกิดขึ้นเมื่อฉันโปรโมตโดยใช้เวิร์กโฟลว์สาขาคุณลักษณะคือคนมักจะพบกับข้อขัดแย้งที่ซับซ้อนที่พวกเขาแก้ไขไม่ถูกต้อง ตามความซับซ้อนฉันหมายถึง "ไม่ชัดเจนว่าจะแก้ไขอย่างไร" ด้วยเหตุนี้เวิร์กโฟลว์อื่น ๆ จึงถูกใช้อย่างแข็งขันมากขึ้นเช่น "pull rebase" - เวิร์กโฟลว์ที่ใช้ ในฐานะผู้สนับสนุนแนวทางของฟีเจอร์สาขาฉันไม่ได้รับการร้องเรียนจริงๆ ใช่คุณต้องรักษาฟีเจอร์ในท้องที่ให้ทันสมัยอยู่เสมอจากต้นแบบหรือที่ใดก็ตาม แต่นั่นเป็นปัญหาที่แท้จริงที่ฉันเห็น ฉันคิดว่าถ้าการผสานของคุณซับซ้อนและอาจมีผลรองก็แสดงว่าเป็นปัญหาการทำงานเป็นทีมมากกว่าปัญหา Git ฉันถูกต้องในการคิดสิ่งนี้หรือไม่? การผสานที่ซับซ้อนขัดแย้งกับสัญญาณของอะไรดีหรือไม่ดี?

5
เป็นวิธีปฏิบัติที่ดีในการสร้าง ClassCollection ของคลาสอื่นหรือไม่?
ให้บอกว่าฉันมีCarคลาส: public class Car { public string Engine { get; set; } public string Seat { get; set; } public string Tires { get; set; } } ให้บอกว่าเรากำลังสร้างระบบเกี่ยวกับที่จอดรถฉันจะใช้Carคลาสจำนวนมากดังนั้นเราจึงสร้างCarCollectionคลาสมันอาจมีวิธีการโฆษณาสองสามอย่างเช่นFindCarByModel: public class CarCollection { public List<Car> Cars { get; set; } public Car FindCarByModel(string model) { // code here return new Car(); …

2
MVCS - รุ่น Store View Controller
ฉันเพิ่งตัดสินใจที่จะเริ่มต้นเรียนรู้การพัฒนา iOS และเพื่อการนี้ฉันได้อ่านการเขียนโปรแกรม iOS: บิ๊กไร่ Nerd คู่มือ ในหนังสือเล่มนี้ผู้เขียนอธิบายรูปแบบการออกแบบMVCS - Model-View-Controller-Storeแนวคิดพื้นฐานว่าเนื่องจากแอปพลิเคชันจำนวนมากใช้ประโยชน์จากแหล่งข้อมูลภายนอกหลายแหล่งที่ทำให้ตรรกะคำขอในตัวควบคุมนั้นยุ่งเหยิงมากแทนที่จะเป็นผู้เขียน เสนอว่าการย้ายตรรกะคำขอทั้งหมดออกจากตัวควบคุมและไปยังวัตถุที่แยกต่างหาก ในระยะสั้นเพื่ออ้างหนังสือ Model-View-Controller-Store ทำให้ตรรกะคำขอเป็นวัตถุแยกต่างหากและเราเรียกวัตถุนี้ว่าร้านค้า (รูปที่ 28.4) การใช้ออบเจกต์ร้านค้าลดรหัสที่ซ้ำซ้อนให้น้อยที่สุดและลดความซับซ้อนของรหัสที่ดึงและบันทึกข้อมูล สิ่งสำคัญที่สุดคือมันย้ายตรรกะในการจัดการกับแหล่งข้อมูลภายนอกเป็นชั้นเรียนที่เป็นระเบียบเรียบร้อยด้วยเป้าหมายที่ชัดเจนและมุ่งเน้น รหัสนี้ทำให้เข้าใจง่ายยิ่งขึ้นซึ่งทำให้ง่ายต่อการบำรุงรักษาและตรวจแก้จุดบกพร่องรวมถึงแบ่งปันกับโปรแกรมเมอร์คนอื่น ๆ ในทีมของคุณ และ สิ่งที่ยอดเยี่ยมเกี่ยวกับร้านค้าอะซิงโครนัสคือแม้ว่าวัตถุจำนวนมากกำลังทำงานเป็นจำนวนมากในการประมวลผลคำขอการไหลของคำขอและการตอบสนองอยู่ในที่เดียวในคอนโทรลเลอร์ สิ่งนี้ทำให้เราได้รับประโยชน์จากโค้ดที่อ่านง่ายและแก้ไขได้ง่าย ฉันต้องการค้นหาเพิ่มเติมเกี่ยวกับรูปแบบนี้และเพื่อดูว่าคนอื่น ๆ อาจจะพูดถึงเรื่องนี้อย่างไร แต่ในขณะที่ค้นหาทางออนไลน์มีเพียงข้อมูลอ้างอิงเดียวที่ฉันพบได้ในหนังสือเล่มเดียวกันนั้น (เป็นชื่อที่รู้จักกันในชื่ออื่น) สำหรับฉันแล้วตรรกะของผู้เขียนดูเหมือนจะสมเหตุสมผลและดูเหมือนว่าเป็นการขยายตรรกะของรูปแบบ MVC ปกติ แต่อาจเป็นเพราะฉันไม่มีประสบการณ์มากกับรูปแบบ MVC ในทางปฏิบัติ (นอกเหนือจากการจู่โจมสู่การพัฒนา iOS ที่ฉันมี ประเภท MVV ที่ใช้แล้วที่มีbackbone.js (นั่นคือถ้าคุณพิจารณาว่าเป็น MVC ) ฉันหวังว่าอาจมีบางคนที่มีประสบการณ์มากกว่านั้นสามารถบอกได้ว่ามีข้อบกพร่อง / ปัญหาที่ชัดเจนเกี่ยวกับรูปแบบMVCSที่ฉันพลาดไปหรือไม่

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