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

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

3
วิธีที่ดีที่สุดในการมีส่วนร่วมกับผู้พัฒนารุ่นเยาว์ในการออกแบบแอปพลิเคชันจากศูนย์? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา เราเป็นทีมงานของนักพัฒนา 3 คน (2 devs ประสบการณ์และจูเนียร์) เราเพิ่งเริ่มโครงการใหม่ล่าสุด เราได้ออกแบบแอพพลิเคชั่นพยายามจดจ่อกับการเลือกสถาปัตยกรรมที่เหมาะสมและตอนนี้เรากำลังวางโค้ดบรรทัดแรก เรากำลังเขียนแก่นแท้ของมันสิ่งที่จะเป็นรากฐานของการสมัครทั้งหมด แอปพลิเคชันนี้ไม่ใช่เรื่องง่ายเช่นกัน ความต้องการประสิทธิภาพการทำงานหนักการกระจายอย่างหนาแน่นเอนทิตีแบบจำลองที่ซับซ้อนเป็นต้น เราทุกคนต่างอยู่ในโซนสบายของเราโดยเฉพาะผู้อยู่ใต้บังคับบัญชา เขาไม่มีประสบการณ์ในการสร้างการออกแบบที่ดีล่วงหน้า นั่นไม่ใช่ปัญหาเพราะฉันและ dev คนอื่น ๆ อยู่ที่นั่นเพื่อช่วยเหลือและเราทั้งคู่เชื่อในการให้คำปรึกษาและในการสร้างทีม แต่ ... เราไม่รู้ว่าอะไรจะเป็นวิธีที่ดีที่สุดที่จะทำเพื่อเขาจะได้ ประสบการณ์ที่สนุกสนานและเรียนรู้ทักษะจำนวนสูงสุด เราทั้งคู่ตระหนักว่าเราไม่ได้มีรุ่นน้องในโครงการใหม่เฉพาะในกลุ่มที่มีอยู่เดิมซึ่งมันง่ายกว่ารุ่นน้องเพราะเขามีฐานรหัสทั้งหมดที่จะเรียนรู้และสร้างแรงบันดาลใจ แต่สำหรับแอพนี้เราแทบจะไม่มีรหัส เราเพิ่งเริ่ม เรากำลังคิดวิธีการบางอย่าง: ให้เขาลองด้วยตัวเองสักสองสามวันแล้วแทรกแซงและสร้างรหัสใหม่ร่วมกับเขาคัดท้ายเขาไปในทิศทางที่ถูกต้องจากนั้นทำซ้ำ => อาจไม่เป็นประสบการณ์ที่สนุกสำหรับเขาเพราะเราจะชี้ให้เห็นข้อผิดพลาดของเขาในทุก ๆ ; ให้เขาจับคู่การเขียนโปรแกรมกับเราคนหนึ่ง => เขาอาจจะกลายเป็นแค่ "คนดู" และเห็นด้วยกับทุกสิ่งที่เราทำโดยไม่ต้องเรียนรู้อะไรมากมาย ให้เราสร้างโครงกระดูกของแต่ละโมดูลด้วยการออกแบบที่มั่นคงแล้วให้โมดูลกับเขาเพื่อเพิ่มชิ้นส่วนที่หายไป => อาจไม่สนุกที่จะรับหลังจากเราและมีความเสี่ยงที่เขาให้ความสนใจเพียงเติมช่องว่าง ไม่ใช่การออกแบบทั้งหมด เราจะทำให้เขามีส่วนร่วมในการออกแบบอย่างไรเพื่อที่เขาจะไม่รู้สึกว่าถูกทิ้งไว้ข้างนอกและเพื่อให้เขาเรียนรู้มากมายจากประสบการณ์และได้รับความมั่นใจเพียงพอที่จะลองด้วยตัวเอง

3
ต้องการความช่วยเหลือในการระบุอัลกอริทึมการตั้งเวลาลีก
ฉันกำลังพยายามสร้างตารางเวลากีฬาลีก ฉันมีปัญหาในการระบุอัลกอริทึมเพื่อช่วยฉันเติมในแต่ละช่องอย่างมีประสิทธิภาพ ข้อมูลตัวอย่างเพื่อสร้างตารางจะเป็น: 10 ทีม แต่ละทีมเล่นกัน 1 ครั้ง (ต้องมีเกมทั้งหมด 45 เกม) แต่ละทีมเล่นไม่เกิน 1 ครั้งต่อวัน ในการทดสอบของฉันฉันใช้ 9 วันกับ 5 ช่องต่อวัน ตารางคำสั่งผสม (ประกอบด้วย 45 คอมโบ) ID Team1ID Team2ID บิตได้รับการแต่งตั้ง ตารางเวลา (ประกอบด้วย 45 ช่วงเวลา) กำหนดเวลา ID บ้าน ทีมออก ห่างทีม เกมวันเกมเวลา ตอนนี้ขั้นตอนที่มีอยู่ของฉันเติมประมาณ 90% ของช่องที่เหลือ 10% ของช่องว่างของฉันให้ว่างเปล่ากับความขัดแย้งของการตั้งเวลาตามกฎข้างต้น ฉันวนรอบตารางเวลาของฉันตามลำดับวันที่ / เวลาจากน้อยไปมาก สล็อตแรกของฉันอาจเป็นวันเสาร์เวลา 8:00 น. ฉันสอบถามรายชื่อทีมที่ยังไม่ได้กำหนด ฉันจึงจัดเรียงชุดค่าผสมที่เป็นไปได้ของทีมเหล่านั้น …

3
อัลกอริทึมสำหรับการทำโมเสคภาพ - มีวิธีที่เร็วกว่านี้หรือไม่?
ฉันเล่นกับการทำภาพโมเสค สคริปต์ของฉันใช้ภาพจำนวนมากปรับขนาดให้เป็นภาพขนาดย่อจากนั้นใช้เป็นภาพย่อยเพื่อประมาณภาพเป้าหมาย จริงๆแล้ววิธีการนี้ค่อนข้างเป็นที่น่าพอใจ: ฉันคำนวณข้อผิดพลาดกำลังสองเฉลี่ยสำหรับทุกหัวแม่มือในทุกตำแหน่งไทล์ ตอนแรกฉันเพิ่งใช้ตำแหน่งที่โลภ: วางนิ้วโป้งโดยมีข้อผิดพลาดน้อยที่สุดบนกระเบื้องที่เหมาะสมที่สุดแล้วต่อไปเรื่อย ๆ ปัญหาเกี่ยวกับความโลภคือมันจะทำให้คุณวางนิ้วหัวแม่มือที่แตกต่างกันมากที่สุดบนกระเบื้องที่ได้รับความนิยมน้อยที่สุดในที่สุดไม่ว่าพวกเขาจะจับคู่กันอย่างใกล้ชิดหรือไม่ก็ตาม ฉันแสดงตัวอย่างที่นี่: http://williamedwardscoder.tumblr.com/post/84505278488/making-image-mosaics ดังนั้นฉันจึงทำการสุ่มสลับจนกว่าสคริปต์จะถูกขัดจังหวะ ผลลัพธ์ค่อนข้างโอเค การสลับแบบสุ่มของไพ่สองใบไม่ได้เป็นการปรับปรุงเสมอไป แต่บางครั้งการหมุนของไพ่สามใบขึ้นไปส่งผลให้เกิดการปรับปรุงระดับโลกเช่นA <-> Bอาจไม่ดีขึ้น แต่A -> B -> C -> A1อาจจะ .. ด้วยเหตุนี้หลังจากที่สุ่มไพ่สองใบและพบว่าพวกมันไม่ได้ปรับปรุงฉันก็เลือกไพ่หลายใบเพื่อประเมินว่าพวกเขาสามารถเป็นไพ่ใบที่สามได้ไหมในการหมุน ฉันไม่สำรวจว่าชุดไพ่สี่ชุดใด ๆ สามารถหมุนได้อย่างมีกำไรและอื่น ๆ ; นั่นจะเป็นของจริงแพงสูงในไม่ช้า แต่มันต้องใช้เวลา .. มาก! มีวิธีที่ดีกว่าและเร็วกว่านี้ไหม? ปรับปรุงเงินรางวัล ผมทดสอบจากการใช้งานที่หลากหลายและงูหลามผูกของวิธีฮังการี ที่เร็วที่สุดคือ pure-Python https://github.com/xtof-durr/makeSimple/blob/master/Munkres/kuhnMunkres.py ลางสังหรณ์ของฉันคือสิ่งนี้ใกล้เคียงกับคำตอบที่ดีที่สุด; เมื่อเรียกใช้บนภาพทดสอบห้องสมุดอื่น ๆ ทั้งหมดเห็นด้วยกับผลลัพธ์ แต่ kuhnMunkres.py นี้ในขณะที่เป็นคำสั่งที่มีขนาดเร็วขึ้นมากเพียงใกล้มากกับคะแนนที่การใช้งานอื่น ๆ ได้ตกลงไว้ ความเร็วขึ้นอยู่กับข้อมูล …

4
สร้างแบบจำลองความสัมพันธ์กับ DDD (หรือมีเหตุผล)?
นี่คือข้อกำหนดที่ง่ายขึ้น: ผู้ใช้สร้างQuestionที่มีหลายAnswers Questionต้องมีอย่างน้อยหนึ่งAnswerรายการ การชี้แจง: คิดQuestionและAnswerในการทดสอบ : มีคำถามหนึ่งข้อ แต่มีหลายคำตอบซึ่งมีเพียงไม่กี่ข้อที่ถูกต้อง ผู้ใช้คือนักแสดงที่กำลังเตรียมการทดสอบนี้ดังนั้นเขาจึงสร้างคำถามและคำตอบ ฉันพยายามจำลองตัวอย่างง่ายๆนี้เพื่อ 1) จับคู่โมเดลชีวิตจริง 2) แสดงรหัสด้วยดังนั้นเพื่อลดการใช้ผิดและข้อผิดพลาดที่อาจเป็นไปได้และให้คำแนะนำแก่นักพัฒนาเกี่ยวกับวิธีใช้โมเดล คำถามที่เป็นนิติบุคคลในขณะที่คำตอบคือวัตถุที่คุ้มค่า คำถามถือคำตอบ จนถึงตอนนี้ฉันมีวิธีแก้ปัญหาที่เป็นไปได้เหล่านี้ [A]ภายในโรงงานQuestion แทนที่จะสร้างAnswerด้วยตนเองเราสามารถโทร: Answer answer = question.createAnswer() answer.setText(""); ... ที่จะสร้างคำตอบและเพิ่มลงในคำถาม จากนั้นเราสามารถจัดการคำตอบได้โดยตั้งค่าคุณสมบัติ ด้วยวิธีนี้เฉพาะคำถามเท่านั้นที่สามารถสร้างคำตอบได้ นอกจากนี้เราป้องกันไม่ให้มีคำตอบโดยไม่มีคำถาม แต่เราไม่ได้มีการควบคุมมากกว่าการสร้างคำตอบเป็นที่ hardcoded Questionใน นอกจากนี้ยังมีปัญหาหนึ่งกับ 'ภาษา' ของรหัสด้านบน ผู้ใช้คือคนที่สร้างคำตอบไม่ใช่คำถาม โดยส่วนตัวแล้วฉันไม่ชอบที่เราจะสร้างวัตถุที่มีคุณค่าและขึ้นอยู่กับนักพัฒนาเพื่อเติมให้เต็มด้วยค่า - เขาจะแน่ใจได้อย่างไรว่าจะต้องเพิ่มอะไรบ้าง [B]คำถามจากโรงงานใช้ # 2 บางคนบอกว่าเราควรมีวิธีนี้ในQuestion: question.addAnswer(String answer, boolean correct, int level....); เช่นเดียวกับวิธีแก้ไขปัญหาข้างต้นวิธีนี้ใช้ข้อมูลที่จำเป็นสำหรับคำตอบและสร้างรายการที่จะถูกเพิ่มลงในคำถามด้วย …

4
เมื่อไรที่เมธอดของคลาสส่งคืนอินสแตนซ์เดียวกันหลังจากแก้ไขตัวเอง?
ฉันได้เรียนที่มีสามวิธีA(), และB() C()วิธีการเหล่านั้นแก้ไขอินสแตนซ์ของตัวเอง ในขณะที่วิธีการจะต้องส่งคืนอินสแตนซ์เมื่ออินสแตนซ์เป็นสำเนาแยกต่างหาก (เช่นเดียวกับClone()) ฉันมีตัวเลือกฟรีที่จะส่งคืนvoidหรืออินสแตนซ์เดียวกัน ( return this;) เมื่อทำการแก้ไขอินสแตนซ์เดียวกันในวิธีการและไม่คืนค่าอื่น ๆ obj.A().B().C();เมื่อตัดสินใจกลับมาเช่นการแก้ไขเดียวกันผมสามารถทำโซ่วิธีการเรียบร้อยเช่น นี่จะเป็นเหตุผลเดียวที่ทำเช่นนั้น? มันยังโอเคที่จะปรับเปลี่ยนอินสแตนซ์ของตัวเองและส่งคืนด้วยหรือไม่ หรือควรส่งคืนสำเนาและปล่อยให้วัตถุต้นฉบับเหมือนเดิมหรือไม่ เพราะเมื่อส่งคืนอินสแตนซ์ที่ถูกแก้ไขเดียวกันผู้ใช้อาจจะคิดว่าค่าที่ส่งคืนเป็นสำเนามิฉะนั้นจะไม่ถูกส่งคืน? หากไม่เป็นไรวิธีที่ดีที่สุดในการชี้แจงเรื่องดังกล่าวกับวิธีการคืออะไร

2
การอนุมานประเภทใน Golang / Haskell
ฉันอ่านแล้วว่า Go ไม่มีการอนุมานแบบจริงในแง่ที่ภาษาที่ใช้งานได้เช่น ML หรือ Haskell มี แต่ฉันไม่สามารถหาคำเปรียบเทียบที่เข้าใจได้ง่ายของทั้งสองเวอร์ชัน ใครสามารถอธิบายในแง่พื้นฐานว่าการอนุมานใน Go นั้นแตกต่างจากการอนุมานประเภทใน Haskell และข้อดี / ข้อเสียของแต่ละคนอย่างไร

1
รูปแบบการสร้างเมนู
ฉันมีปัญหาในการจัดการกับเมนูที่ไม่ได้ใช้ในการกำหนดเส้นทาง ฉันมาจาก Drupal ที่ระบบเมนูจัดการการกำหนดเส้นทางเช่นกัน ดังนั้นการตั้งค่าสถานะที่ใช้งานและสถานะเส้นทางที่ใช้งานจะถูกจัดการโดยเส้นทาง (ที่ทำหน้าที่เป็นระบบการแสดงผลเมนูเช่นกัน) ตอนนี้กรอบ PHP จำนวนมากมีคลาสเราเตอร์ที่จัดการการกำหนดเส้นทาง ดูเหมือนจะเป็นการแยกที่ดีเนื่องจากเมนูไม่ควรระวัง POST || ตัวเลือก || ... คำขอ แต่เมื่อเขียนส่วนหน้าฉันพบว่าตัวเองเขียนโค้ดเมนูยาก หรือเก็บทุกอย่างใน DB และส่งค่าเหล่านั้นไปยังมุมมอง สิ่งที่ฉันไม่ชอบคือวิธีนี้คือคุณกำลังสร้างสำเนาของสิ่งที่คุณเขียนไว้ในเราเตอร์ แต่ตอนนี้ใช้คลาสเมนู ตัวอย่าง: Route::get('/somewhere','routename.somewhere','showStuffController'); Route::post('/somewhere','routename.somewhere','saveStuffController'); Menu::add('label.somewhere','routename.somewhere'); คุณกำลังแยกข้อกังวลที่นี่เพื่อที่ดี แต่เมนูขึ้นอยู่อย่างมากในเส้นทางเพื่อตั้งค่าสถานะการใช้งาน เมนูจะต้องรู้เกี่ยวกับลำดับชั้นเพื่อกำหนดเส้นทางการใช้งาน ใช่แล้วการตั้งค่าเทรลแอคทีฟและคลาสสถานะแอคทีฟเป็นเรื่องของมุมมอง แต่มี if ( Route::currentName() === $menuitem->getRouteName() ) { print 'active'; } ทุกมุมมองของคุณดูโง่ ถ้าอย่างนั้นก็ให้เพิ่มแอคทีฟเทรลที่น่ารำคาญหากมันเป็นของจริง การจัดการสิ่งนั้นก่อนที่ภาพจะเรนเดอร์และตั้งค่าสถานะแอคทีฟเทรลให้เป็นจริงเพียง แต่ดูน่าเกลียดในแบบที่ฉันรู้ คำถามของฉันคือ: มีรูปแบบหรือวิธีที่ชาญฉลาดในการทำความสะอาดนี้ดีกว่า ... ? หนึ่งควรจัดการ …

4
การละเว้น“ destructors” ใน C กำลังทำให้ YAGNI อยู่ไกลเกินไปใช่ไหม
ฉันกำลังทำงานกับแอพพลิเคชั่นแบบฝังตัวขนาดกลางใน C โดยใช้เทคนิคแบบ OO "คลาส" ของฉันคือโมดูล. h / .c โดยใช้ data structs และ function pointers structs เพื่อเลียนแบบ encapsulation, polymorphism และการฉีดพึ่งพา ตอนนี้ใคร ๆ ก็คาดหวังว่าmyModule_create(void)ฟังก์ชั่นจะมาพร้อมกับmyModule_destroy(pointer)คู่ แต่โครงการที่ถูกฝังอยู่นั้นทรัพยากรที่มีการสร้างอินสแตนซ์สมจริงไม่ควรปล่อยออกมา ฉันหมายถึงถ้าฉันมีพอร์ตอนุกรม UART 4 ​​พอร์ตและฉันสร้างอินสแตนซ์ UART 4 ​​อันด้วยหมุดและการตั้งค่าที่ต้องการมีเหตุผลที่ไม่ต้องการทำลาย UART # 2 ในบางจุดในระหว่างรันไทม์ ดังนั้นตามหลักการ YAGNI (คุณไม่ต้องการมัน) ฉันควรละเว้น destructors หรือไม่ มันดูแปลกมากสำหรับฉัน แต่ฉันไม่สามารถนึกถึงการใช้งานได้สำหรับพวกเขา ทรัพยากรจะถูกปลดปล่อยเมื่ออุปกรณ์ปิด

1
การทดสอบช่องว่างระหว่างหน่วยและการรวม: การรวมในการทดสอบส่วนประกอบขนาดเล็กการรวมหน่วย
ในช่วงสองสามสัปดาห์ที่ผ่านมาฉันได้ครุ่นคิดและค้นคว้าวิธีเติมช่องว่างในวิธีการทดสอบของเรา ในการทดสอบหน่วยคำศัพท์ที่ง่ายมีขนาดเล็กเกินไปและการทดสอบการรวมแบบดั้งเดิมนั้นใหญ่เกินไป สถานการณ์ที่เกิดขึ้นบ่อยครั้งที่Aและองค์ประกอบการใช้งานทั้งB Cอย่างไรก็ตามAและมีความต้องการที่แตกต่างกันเล็กน้อยและทำให้สมมติฐานแตกต่างกันเล็กน้อยเกี่ยวกับB Cหากฉันเป็นผู้พัฒนาAฉันจะทดสอบสมมติฐานของฉันได้Cอย่างไรและที่ไหน? เห็นได้ชัดว่าการทดสอบหน่วยที่Aมีข้อสมมติฐานล้อเลียนเกี่ยวกับCการทดสอบAแยกได้ แต่ก็ไม่ได้ทดสอบสมมติฐานเอง Cเป็นไปได้ก็คือการเพิ่มการทดสอบหน่วยสำหรับ อย่างไรก็ตามสิ่งนี้ไม่เหมาะเพราะในขณะที่Aอยู่ระหว่างการพัฒนาการเปลี่ยนแปลงการทดสอบCด้วยข้อสมมติฐานที่พัฒนาขึ้นจากAนั้นจะมีความเงอะงะมากเกินไป อันที่จริงAs นักพัฒนาอาจไม่ได้มีการเข้าถึงเพียงพอที่จะทดสอบหน่วยของC(เช่นห้องสมุดภายนอก) ในการจัดวางสิ่งนี้ด้วยตัวอย่างที่ชัดเจนยิ่งขึ้น: สมมติว่านี่เป็นแอปพลิเคชั่นของโหนด AและBขึ้นอยู่กับCการอ่านไฟล์ (ในหมู่สิ่งอื่น ๆ ) Cและการจัดเก็บเนื้อหาของแฟ้มในวัตถุส่งผ่านไปยัง ในตอนแรกไฟล์ทั้งหมดที่Cจัดการมีขนาดเล็กและสามารถอ่านแบบซิงโครนัสโดยไม่มีการบล็อกที่สำคัญ อย่างไรก็ตามผู้พัฒนาBตระหนักว่าไฟล์ของเขามีขนาดใหญ่ขึ้นและจำเป็นต้องเปลี่ยนCมาอ่านแบบ async ซึ่งส่งผลให้เกิดข้อผิดพลาดในการซิงโครไนซ์เป็นระยะAซึ่งยังคงCมีการอ่านไฟล์ นี่เป็นประเภทของบั๊กที่ยากต่อการติดตามจากการทดสอบการรวมระบบแบบสมบูรณ์และอาจไม่สามารถทำการทดสอบการรวมระบบได้เลย มันไม่ได้ถูกจับโดยAการทดสอบหน่วย s เพราะAข้อสันนิษฐานนั้นถูกเยาะเย้ย แต่มันได้อย่างง่ายดายจับโดย "มินิ" บูรณาการทดสอบว่าการออกกำลังกายเพียงและAC ฉันพบการอ้างอิงประเภทนี้ของการทดสอบเพียงเล็กน้อยเท่านั้น บูรณาการในขนาดเล็ก , การทดสอบส่วนประกอบของการรวม , หน่วยบูรณาการการทดสอบ นอกจากนี้ยังเกี่ยวข้องกับทิศทางการทดสอบ BDDค่อนข้างมากกว่าการทดสอบ TDD อย่างเป็นทางการ ฉันจะเติมช่องว่างการทดสอบนี้ได้อย่างไร โดยเฉพาะ - ฉันจะทำการทดสอบแบบไหน? ฉันจะจำลองอินพุตAและCสำหรับการทดสอบการรวม "มินิ" ได้อย่างไร และควรแยกความกังวลเรื่องการทดสอบระหว่างการทดสอบและการทดสอบหน่วยเท่าไหร่ หรือมีวิธีที่ดีกว่าในการเติมเต็มช่องว่างในการทดสอบ?

6
แยกอินเตอร์เฟซที่มีขนาดใหญ่
ฉันใช้อินเตอร์เฟสขนาดใหญ่ที่มีประมาณ 50 วิธีในการเข้าถึงฐานข้อมูล ส่วนต่อประสานถูกเขียนขึ้นโดยเพื่อนร่วมงานของฉัน เราพูดถึงเรื่องนี้: ฉัน: 50 วิธีมากเกินไป มันเป็นกลิ่นรหัส เพื่อนร่วมงาน: ฉันต้องทำอย่างไรกับเรื่องนี้? คุณต้องการเข้าถึงฐานข้อมูล - คุณมีมัน ฉัน: ใช่ แต่มันไม่ชัดเจนและไม่สามารถบำรุงรักษาได้ในอนาคต เพื่อนร่วมงาน: โอเคคุณพูดถูกมันไม่ดีเลย อินเตอร์เฟสควรมีหน้าตาเป็นอย่างไร? ฉัน: วิธีการประมาณ 5 วิธีที่ส่งคืนวัตถุที่มีเช่น 10 วิธีในแต่ละวิธี? อืม แต่นี่จะไม่เหมือนกันหรือ สิ่งนี้นำไปสู่ความชัดเจนมากขึ้นหรือไม่? มันคุ้มค่ากับความพยายามหรือไม่? ทุก ๆ ครั้งที่ฉันอยู่ในสถานการณ์ที่ฉันต้องการอินเทอร์เฟซและสิ่งแรกที่นึกได้ก็คืออินเทอร์เฟซใหญ่ มีรูปแบบการออกแบบทั่วไปสำหรับสิ่งนี้หรือไม่? อัปเดต (ตอบกลับความคิดเห็นของ SJuan): "ชนิดวิธีการ": เป็นอินเทอร์เฟซสำหรับดึงข้อมูลจากฐานข้อมูล วิธีการทั้งหมดมีรูปแบบ (pseudocode) List<Typename> createTablenameList() วิธีการและตารางไม่ได้อยู่ในความสัมพันธ์ 1-1 อย่างชัดเจนสิ่งสำคัญคือความจริงที่ว่าคุณได้รับรายการบางประเภทที่มาจากฐานข้อมูลเสมอ

3
ไวยากรณ์ซ้ำกันสำหรับการกำหนดฟังก์ชั่นที่มีชื่อเป็นการตัดสินใจออกแบบภาษาที่ไม่ดีหรือไม่?
ฉันกำลังจำลองภาษาการเขียนโปรแกรมเพื่อความสนุกสนานและไวยากรณ์ได้รับอิทธิพลอย่างมากจาก Scala - คำจำกัดความของฟังก์ชันเฉพาะ ฉันได้พบปัญหาการออกแบบเพราะภาษาของฉันไม่ได้แยกความแตกต่างระหว่างการทำงานที่กำหนดไว้ผ่านทางdefไวยากรณ์ (วิธีการเรียน) และฟังก์ชั่นที่ไม่ระบุชื่อที่ได้รับมอบหมายให้เป็นค่า (สร้างขึ้นโดยใช้=>) - มันเอาความแตกต่างทั้งในการดำเนินงานและพฤติกรรม ผลลัพธ์คือนิยามสองคำต่อไปนี้หมายถึงสิ่งเดียวกัน: def square(x: Int) = x*x val square = (x: Int) => x*x ไม่มีเหตุผลสำหรับแบบฟอร์มหลัง (การกำหนดฟังก์ชันที่ไม่ระบุชื่อแบบทันที) ที่จะใช้ในสถานการณ์ปกติใด ๆ - เป็นไปได้ที่จะใช้แทนdefแบบฟอร์ม จะมีไวยากรณ์ที่ซ้ำกันดังกล่าวสำหรับการกำหนดฟังก์ชั่นที่มีชื่อทำร้ายความ orthogonality ของภาษาหรือด้านการออกแบบอื่น ๆ ? ฉันชอบโซลูชันนี้เพราะช่วยให้คำจำกัดความสั้น ๆ และใช้งานง่ายของวิธีการและฟังก์ชั่นที่มีชื่อ (ผ่านdef) และคำจำกัดความสั้น ๆ ของฟังก์ชั่นที่ไม่ระบุชื่อ (ใช้=>) แก้ไข: Scala จะแยกความแตกต่างระหว่างสอง - ฟังก์ชั่นที่ไม่ระบุชื่อไม่เหมือนกับวิธีที่กำหนดด้วยdefใน Scala ความแตกต่างนั้นค่อนข้างบอบบาง - …

4
IObserver <T> ของ. NET มีไว้สำหรับการสมัครสมาชิกกับ IObservables หลายรายการหรือไม่
มีอินเทอร์เฟซIObservableและIObserverใน. NET ( ที่นี่และที่นี่ด้วย ) ที่น่าสนใจคือการใช้งาน IObserver อย่างเป็นรูปธรรมไม่ได้ถือการอ้างอิงโดยตรงกับ IObservable ไม่รู้ว่าใครเป็นสมาชิก มันสามารถเรียก unsubscriber เท่านั้น "โปรดดึงหมุดเพื่อยกเลิกการสมัคร" แก้ไข:ดำเนิน unsubscriber IDisposableผมคิดว่าโครงการนี้ถูกจ้างมาเพื่อป้องกันไม่ให้ปัญหาผ่านพ้นไปฟัง แม้ว่าสองสิ่งนั้นยังไม่ชัดเจนนักสำหรับฉัน ชั้น Unsubscriber ภายในให้พฤติกรรมการสมัครและลืม? ใคร (และเมื่อใด) โทรIDisposable.Dispose()ไปที่ Unsubscriber? ตัวรวบรวมขยะ (GC) ไม่ได้กำหนดไว้ล่วงหน้า [ข้อจำกัดความรับผิดชอบ: โดยรวมฉันใช้เวลากับ C และ C ++ มากกว่า C # แล้ว] จะเกิดอะไรขึ้นถ้าฉันต้องการสมัครเป็นผู้สังเกตการณ์ K กับ L1 ที่สังเกตได้และผู้สังเกตการณ์ได้สมัครสมาชิก L2 ที่สังเกตได้อื่นแล้ว K.Subscribe(L1); K.Subscribe(L2); K.Unsubscribe(); L1.PublishObservation(1003); L2.PublishObservation(1004); …

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

1
จะแยกวิเคราะห์ข้อมูลหลายฟิลด์ / ไฟล์แยกจากกันได้อย่างไร?
ฉันต้องการแยกแบบฟอร์มหลายส่วนสองครั้ง: ครั้งหนึ่งเพื่อคว้าฟิลด์ที่เข้ามาและภายหลังเพื่อดำเนินการอัปโหลดไฟล์ ฉันกำลังพยายามแยกข้อกังวลที่เหมาะสมภายในแอพ Node ของฉัน: คอนโทรลเลอร์มีหน้าที่ในการจัดการฟิลด์ที่เข้ามา รุ่นรับผิดชอบตรรกะของไฟล์อัปโหลด ฉันจำเป็นต้องส่งข้อมูลเขตข้อมูลลงในแบบจำลองเพื่อสร้างอินสแตนซ์ใหม่ดังนั้นข้อมูลเขตข้อมูลจึงต้องพร้อมใช้งานก่อนที่การอัปโหลดไฟล์จะเริ่มขึ้น ขณะนี้ทุกคนform.parse()หรือฟังก์ชั่นเทียบเท่าแยกทั้งสองเขตข้อมูลและไฟล์ร่วมกัน ตัวอย่าง: req.pipe(busboy)จัดการทั้งไฟล์และฟิลด์ด้วยกัน ฉันได้ตรวจสอบโมดูลเช่น node-multiparty, formidable, busboy, multer ดูเหมือนว่าไม่มีใครมีทางออกสำหรับเรื่องนี้ ตัวอย่างของสิ่งที่ฉันต้องการบรรลุอยู่ที่นี่: /programming/22336177/node-js-busboy-parse-fields-and-files-seperatly เป็นไปได้ไหม
9 data  node.js  upload 

3
กำลังจัดเก็บเนื้อหาของไซต์ที่สามารถแก้ไขได้?
เรามีเว็บไซต์ที่ใช้ Django ซึ่งเราต้องการสร้างเนื้อหา (ข้อความและตรรกะทางธุรกิจเช่นแผนการกำหนดราคา) ที่สามารถแก้ไขได้อย่างง่ายดายภายในบริษัท ดังนั้นเราจึงตัดสินใจจัดเก็บไว้นอกรหัสเบส โดยปกติแล้วเหตุผลดังต่อไปนี้: เป็นสิ่งที่คนที่ไม่ใช่ด้านเทคนิคต้องการแก้ไข ตัวอย่างหนึ่งคือการเขียนคำโฆษณาสำหรับเว็บไซต์ - โปรแกรมเมอร์จัดทำแม่แบบพร้อมข้อความที่เป็นค่าเริ่มต้นเป็น "Lorem ipsum ... " และเนื้อหาจริงจะถูกแทรกในภายหลังไปยังฐานข้อมูล เป็นสิ่งที่เราต้องการที่จะสามารถเปลี่ยนแปลงได้อย่างรวดเร็วโดยไม่จำเป็นต้องปรับใช้รหัสใหม่ (ซึ่งปัจจุบันเราทำสองครั้งต่อสัปดาห์) ตัวอย่างจะเป็นคุณสมบัติที่มีให้กับลูกค้าในระดับราคาที่แตกต่างกัน แทนที่จะอ่านโค้ดเหล่านี้เราอ่านจากฐานข้อมูล โซลูชันที่อธิบายมีความยืดหยุ่น แต่มีสาเหตุบางอย่างที่ฉันไม่ชอบ เพราะเนื้อหาจะต้องมีการอ่านข้อมูลจากฐานข้อมูลมีค่าใช้จ่ายในการปฏิบัติงาน เราลดขนาดลงโดยใช้รูปแบบแคช แต่สิ่งนี้ยังเพิ่มความซับซ้อนให้กับระบบ นักพัฒนาซอฟต์แวร์ที่เรียกใช้รหัสภายในดูระบบในสถานะที่แตกต่างกันอย่างมากเมื่อเทียบกับวิธีการทำงานกับการผลิต การทดสอบอัตโนมัติยังใช้ระบบในสถานะที่แตกต่างกัน สถานการณ์เช่นการทดสอบคุณลักษณะใหม่บนเซิร์ฟเวอร์ staging ก็มีความยุ่งยากเช่นกันหากเซิร์ฟเวอร์ staging ไม่มีสำเนาของฐานข้อมูลล่าสุดอาจแตกต่างจากการผลิตโดยไม่คาดคิด เราสามารถลดได้โดยการยอมรับสถานะใหม่ไปยังที่เก็บเป็นครั้งคราว (เช่นโดยการเพิ่มการย้ายข้อมูล) แต่ดูเหมือนว่าวิธีการที่ผิด ใช่ไหม? ความคิดใดวิธีที่ดีที่สุดในการแก้ปัญหาเหล มีวิธีที่ดีกว่าสำหรับการจัดการเนื้อหาที่ฉันมองเห็นหรือไม่?

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