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

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

1
ตำแหน่งที่จะวางคีย์ API: ส่วนหัว HTTP ที่กำหนดเอง VS ส่วนหัวการให้สิทธิ์ด้วยชุดรูปแบบที่กำหนดเอง
ฉันกำลังออกแบบ REST API โดยใช้การอนุญาต / การพิสูจน์ตัวตนผ่านทางคีย์ API ฉันพยายามคิดออกว่าเป็นที่ที่ดีที่สุดสำหรับสิ่งนั้นและพบว่าหลายคนแนะนำให้ใช้ส่วนหัว HTTP ที่กำหนดเองเช่นProjectName-Api-Keyเช่น: ProjectName-Api-Key: abcde แต่ก็เป็นไปได้และถูกต้องตามหลักอุดมการณ์ที่จะใช้Authorizationส่วนหัวกับชุดรูปแบบที่กำหนดเองเช่น: Authorization: ApiKey abcde ในทางกลับกันฉันพบการพิจารณาว่ารูปแบบการให้สิทธิ์ที่กำหนดเองอาจไม่คาดคิดและไม่ได้รับการสนับสนุนจากลูกค้าบางรายและนำไปสู่รหัสที่กำหนดเองอยู่ดีดังนั้นจึงเป็นการดีกว่าที่จะใช้ส่วนหัวที่กำหนดเอง คุณต้องการส่งคีย์ API ไปทางไหน

2
Antipattern สำหรับกรณีคืออะไร
บทความ TDWTF วันนี้เริ่มต้นด้วยคำสารภาพจากผู้แต่ง: ฉันไม่ทราบว่ารูปแบบการต่อต้าน For-Case นั้นเป็นอย่างไรจนกระทั่งเมื่อไม่นานมานี้เมื่อมีบทความที่ประณามว่าเป็นรูปแบบการต่อต้าน ฉันแน่ใจว่าฉันอาจจะใช้มันในบางจุด แต่ฉันไม่เคยรู้ว่ามันโดยชื่อ มันคิดว่าเป็น antipattern ตำราเรียนที่โดยทั่วไปหมายถึงความเข้าใจผิดของการวนรอบคำสั่งกรณีปัญหาการแก้ไขหรือการรวมกันของทั้งสาม จากนั้นเขาก็ดำเนินการราวกับว่าผู้อ่านโดยธรรมชาติรู้ว่าสิ่งที่ต่อต้านรูปแบบกรณีเป็นโดยไม่ต้องอธิบายเพิ่มเติมใด ๆ แต่ฉันทำไม่ได้! ฉันไม่ได้เห็น "น้ำท่วมของบทความ" ที่ Remy พูดถึงและการอ้างอิงที่สำคัญเท่านั้นที่ฉันสามารถหาได้ใน Google (นอกเหนือจากบทความของ Remy) คือโพสต์บล็อกโดย Raymond Chenเกี่ยวกับantipattern for-ifซึ่งเห็นได้ชัดว่าเกี่ยวข้อง . เขาไม่ได้กำหนด "รูปแบบการต่อต้านกรณี" เช่นกัน "รูปแบบการต่อต้านกรณี" คืออะไรที่คนพวกนี้พูดถึงและอะไรที่ทำให้เป็นรูปแบบการต่อต้าน?

6
REST endpoint เพื่อแสดงตัวอย่างก่อน POSTing
ฉันออกแบบเว็บแอปพลิเคชั่นใหม่ซึ่งขับเคลื่อนโดยแบ็กเอนด์ REST และส่วนหน้า HTML + JS มีวิธีการPOSTหนึ่งวิธีในการเปลี่ยนเอนทิตีหนึ่ง (ลองเรียกใช้การกำหนดค่า) ซึ่งมีผลข้างเคียงหลายอย่างในสถานะขององค์ประกอบหลายอย่างของแอปพลิเคชัน สมมติว่ามีการดำเนินการPOSTด้วยวิธีนี้: POST /api/config BODY {config: ....} ด้วยเหตุนี้ฉันจึงต้องการแสดงตัวอย่างก่อนที่จะทำการเปลี่ยนแปลงเหล่านั้นเพื่อให้ผู้ใช้สามารถสังเกตเห็นสิ่งที่กำลังจะเปลี่ยนแปลง สิ่งแรกที่ฉันคิดเกี่ยวกับการทำให้จุดสิ้นสุดGETสำหรับการแสดงตัวอย่างส่งเนื้อความของสถานะใหม่ของเอนทิตี ทางนี้: GET /api/preview/items BODY {config: ....} อาจแสดงสถานะใหม่สำหรับรายการที่มีการกำหนดค่าใหม่ GET /api/preview/sales BODY {config: ....} อาจแสดงสถานะใหม่สำหรับการขายด้วยการกำหนดค่าใหม่ ดูเหมือนว่าเป็นความคิดที่ดีที่จะใช้คำกริยาGETเพราะฉันไม่ได้เปลี่ยนสถานะของแอปพลิเคชัน อย่างไรก็ตามการใช้ของร่างกายร้องขอกับGETคำขอดูเหมือนว่าจะท้อแท้ มีวิธีปฏิบัติที่ดีเกี่ยวกับเรื่องนี้หรือไม่? ตัวเลือกอื่นอาจจะเก็บการกำหนดค่าเป็นแบบร่างด้วยวิธีการหนึ่งและแสดงผลลัพธ์กับผู้อื่น แต่จะต้องมีขั้นตอนเพิ่มเติมและต้องจัดการแบบร่างในเซิร์ฟเวอร์: POST /api/preview/config BODY {config: ....} GET /api/preview/items?idPreviewConfig=1

6
ผู้เขียนหมายถึงอะไรโดยการส่งอินเทอร์เฟซอ้างอิงไปยังการใช้งานใด ๆ
ผมอยู่ในขั้นตอนของการพยายามที่จะโท C # ดังนั้นฉันอ่านรหัสผ่าน Adaptive C #โดยแกรี่แมคลีนฮอลล์ เขาเขียนเกี่ยวกับรูปแบบและรูปแบบการต่อต้าน ในการใช้งานกับส่วนต่อประสานเขาเขียนต่อไปนี้: นักพัฒนาที่ยังใหม่กับแนวคิดของการเขียนโปรแกรมไปยังอินเทอร์เฟซมักมีปัญหาในการปล่อยสิ่งที่อยู่เบื้องหลังอินเทอร์เฟซ ณ เวลารวบรวมไคลเอนต์ของอินเทอร์เฟซใด ๆ ควรมีความคิดที่ไม่มีการใช้งานของอินเทอร์เฟซที่ใช้ ความรู้ดังกล่าวสามารถนำไปสู่ข้อสันนิษฐานที่ไม่ถูกต้องซึ่งทำให้คู่ลูกค้าใช้งานอินเทอร์เฟซเฉพาะ ลองนึกภาพตัวอย่างทั่วไปที่คลาสต้องการบันทึกเรกคอร์ดในที่เก็บข้อมูลถาวร ในการทำเช่นนั้นจะมอบสิทธิ์อย่างถูกต้องให้กับส่วนต่อประสานซึ่งซ่อนรายละเอียดของกลไกการจัดเก็บข้อมูลถาวรที่ใช้ อย่างไรก็ตามมันจะไม่ถูกต้องที่จะตั้งสมมติฐานใด ๆ เกี่ยวกับการใช้งานของอินเตอร์เฟซที่ถูกใช้ในเวลาทำงาน ยกตัวอย่างเช่นการหล่ออ้างอิงอินเตอร์เฟซในการดำเนินการใด ๆ ที่เป็นเสมอความคิดที่ดี อาจเป็นกำแพงภาษาหรือการขาดประสบการณ์ของฉัน แต่ฉันไม่เข้าใจความหมาย นี่คือสิ่งที่ฉันเข้าใจ: ฉันมีโครงการสนุก ๆ เพื่อฝึก C # ที่นั่นฉันมีชั้นเรียน: public class SomeClass... คลาสนี้ถูกใช้ในหลายสถานที่ ในขณะที่เรียนรู้ C # ฉันอ่านว่ามันเป็นนามธรรมที่ดีกว่าด้วยส่วนต่อประสานดังนั้นฉันจึงทำสิ่งต่อไปนี้ public interface ISomeClass <- Here I made a "contract" of …

1
มันสมเหตุสมผลไหมที่จะต้องอัพเดทเวอร์ชั่นของ Bootstrap ที่ใช้ในเว็บแอปพลิเคชันของฉันด้วย?
สำหรับผู้ที่อาจไม่ทราบBootstrapเป็นกรอบ HTML, CSS และ JS ที่สามารถใช้เป็นรากฐานหรือเป็นจุดเริ่มต้นในการสร้างเว็บไซต์หรือเว็บแอปพลิเคชัน ตอนนี้ฉันอยู่ในตำแหน่งที่ฉันมีแอปพลิเคชั่นในการผลิตที่ได้รับการออกแบบด้วยเฟรมเวิร์กเวอร์ชัน 3 แต่ด้วยสไตล์เพิ่มเติมที่สอดคล้องกับเว็บไซต์อื่น ๆ ภายใต้พอร์ตโฟลิโอของ บริษัท อย่างไรก็ตามเรากำลังจะเริ่มดำเนินการเพิ่มเติมบางอย่างในเว็บแอปพลิเคชันนั้นและฉันสงสัย - ฉันควรอัปเดตเวอร์ชันของ bootstrap ที่แอปพลิเคชันใช้หรือไม่ ฉันถามสิ่งนี้ด้วยเหตุผลหลายประการ อย่างแรกคือ bootstrap เวอร์ชัน 4 นั้นไม่ตรงกับเวอร์ชั่น 3 - มีการเปลี่ยนแปลงจำนวนผู้ช่วยเหลือถูกแทนที่หรือถูกลบทั้งหมดดังนั้นจึงเป็นงานที่ไม่ต้องอัปเดต (ไม่มากเกินไป แต่ไม่ใช่ การอัปเดตหมายเลขเวอร์ชันง่ายๆใน package.json และสร้างใหม่อย่างใดอย่างหนึ่ง) ตอนนี้ความเข้าใจของฉันเกี่ยวกับ bootstrap คือในตอนแรกมันเกี่ยวกับการนำเว็บไซต์ / แอปพลิเคชั่นเว็บของคุณออกจากพื้นดิน - เป็นจุดเริ่มต้นที่ดีดังนั้นเพื่อพูด (ชื่อจึง) แต่เมื่อพิจารณาถึงแอพพลิเคชั่นที่ผ่านจุดบู๊ตบูตฉันควรพิจารณาที่จะลงทุนเวลาในการอัพเดตเฟรมเวิร์ก bootstrap หรือไม่ ฉันรู้ว่าบนพื้นผิวนี้ดูเหมือนคำถามที่มีคำตอบที่ชัดเจน - แน่นอนคุณเก็บข้อมูลของคุณให้ทันสมัย ​​!!! แต่ถ้าคุณคิดว่า Bootstrap เป็นวิธีการเริ่มต้นหลังจากที่คุณเริ่มทำงานแล้วทำไมคุณต้องปรับปรุงเฟรมเวิร์กต่อไป คุณได้ปรับแต่งชิ้นส่วนตามความต้องการของแอปพลิเคชันของคุณแล้วคุณไม่ควรปล่อยให้ตัวเองไปในทิศทางที่แตกต่างกันใช่ไหม …

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

2
เหตุใดจึงไม่สามารถใช้ซ็อกเก็ตเพื่อระบุตัวบุคคลแทนคุกกี้ได้
อีกคำถามที่ถูกถามเกี่ยวกับการใช้ที่อยู่ IP เพื่อระบุลูกค้ารายบุคคล ฉันคิดว่าฉันเข้าใจว่าทำไมที่อยู่ IP ไม่เพียงพอ แต่สิ่งที่เกี่ยวกับซ็อกเก็ตซึ่งมีข้อมูลเพิ่มเติมและจากสิ่งที่ฉันเข้าใจคือ stateful? ไม่สามารถใช้แทนคุกกี้ได้ใช่ไหม
17 sockets  cookies 

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

3
การเรียกใช้บริการ async หลายตัวพร้อมกัน
ฉันมีบริการ async REST ไม่กี่รายการซึ่งไม่ได้ขึ้นอยู่กับกันและกัน นั่นคือในขณะที่ "รอ" คำตอบจาก Service1 ฉันสามารถโทร Service2, Service3 และอื่น ๆ ตัวอย่างเช่นอ้างถึงรหัสด้านล่าง: var service1Response = await HttpService1Async(); var service2Response = await HttpService2Async(); // Use service1Response and service2Response ตอนนี้service2Responseไม่ได้ขึ้นอยู่กับservice1Responseพวกเขาและสามารถดึงข้อมูลได้อย่างอิสระ ดังนั้นฉันไม่จำเป็นต้องรอการตอบรับจากบริการแรกเพื่อเรียกบริการที่สอง ฉันไม่คิดว่าฉันสามารถใช้Parallel.ForEachที่นี่ได้เนื่องจากไม่ใช่การทำงานของ CPU bound ในการเรียกการดำเนินการสองอย่างนี้แบบขนานฉันสามารถใช้งานได้Task.WhenAllไหม ปัญหาหนึ่งที่ฉันเห็นการใช้Task.WhenAllคือมันไม่ส่งคืนผลลัพธ์ ในการรับผลลัพธ์ฉันสามารถโทรtask.ResultหลังจากโทรTask.WhenAllได้เนื่องจากงานทั้งหมดเสร็จสมบูรณ์แล้วและสิ่งที่ฉันต้องใช้ในการตอบกลับคืออะไร? รหัสตัวอย่าง: var task1 = HttpService1Async(); var task2 = HttpService2Async(); await Task.WhenAll(task1, task2) var …

9
ควรรวมเวลาของผู้ทดสอบเมื่อประเมินตั๋วหรือไม่
เมื่อสร้างการประมาณเวลาสำหรับตั๋วควรรวมเวลาที่ใช้สำหรับผู้ทดสอบ (QAs) ไว้ในการประมาณตั๋วหรือไม่ ก่อนหน้านี้เราได้ประเมินไว้เสมอโดยไม่มีเวลาทดสอบ แต่เรากำลังพูดถึงรวมถึงมันเสมอ มันสมเหตุสมผลแล้วสำหรับการวิ่งในปัจจุบันของเราล่าสุดก่อนการเปิดตัวเนื่องจากเราจำเป็นต้องรู้ว่าเวลาทั้งหมดจะใช้เวลาหนึ่งสัปดาห์ ฉันเข้าใจเสมอว่าการประเมินนั้นใช้สำหรับนักพัฒนาเท่านั้นเพราะมันมีแนวโน้มว่าจะเป็นทรัพยากรที่ จำกัด ในทีม เพื่อนร่วมงานคนหนึ่งบอกว่าไม่ว่าพวกเขาจะทำงานที่ไหนมาก่อนเวลาทดสอบ เพื่อความชัดเจนนี่เป็นกระบวนการที่นักพัฒนากำลังเขียนหน่วยการรวมและการทดสอบ UI ที่มีความครอบคลุมที่ดี
17 agile  scrum  estimation  qa 

3
การจัดการการต่ออายุโทเค็น / การหมดอายุเซสชันใน RESTful API
ฉันกำลังสร้าง RESTful API ที่ใช้โทเค็น JWT สำหรับการรับรองความถูกต้องของผู้ใช้ (ที่ออกโดยloginปลายทางและส่งในส่วนหัวทั้งหมดหลังจากนั้น) และโทเค็นต้องได้รับการรีเฟรชหลังจากระยะเวลาคงที่ (เรียกrenewจุดสิ้นสุด ) เป็นไปได้ว่าเซสชัน API ของผู้ใช้จะไม่ถูกต้องก่อนที่โทเค็นจะหมดอายุดังนั้นจุดสิ้นสุดทั้งหมดของฉันเริ่มต้นด้วยการตรวจสอบว่า: 1) โทเค็นยังคงถูกต้องและ 2) เซสชันของผู้ใช้ยังคงถูกต้อง ไม่มีวิธีในการทำให้โทเค็นเป็นโมฆะโดยตรงเนื่องจากไคลเอนต์เก็บไว้ในเครื่อง ดังนั้นจุดสิ้นสุดของฉันทั้งหมดต้องส่งสัญญาณให้ลูกค้าทราบถึงสองเงื่อนไขที่เป็นไปได้: 1) ถึงเวลาต่ออายุโทเค็นหรือ 2) เซสชันนั้นไม่ถูกต้องและพวกเขาไม่ได้รับอนุญาตให้เข้าถึงระบบอีกต่อไป ฉันสามารถนึกถึงทางเลือกสองทางสำหรับจุดสิ้นสุดของฉันในการส่งสัญญาณลูกค้าเมื่อเกิดหนึ่งในสองเงื่อนไข (สมมติว่าลูกค้าสามารถปรับให้เข้ากับตัวเลือกใดตัวเลือกหนึ่ง): ส่งคืนรหัส http 401 (ไม่ได้รับอนุญาต) หากเซสชันไม่ถูกต้องหรือส่งคืนรหัส 412 (เงื่อนไขเบื้องต้นล้มเหลว) เมื่อโทเค็นหมดอายุและถึงเวลาเรียกrenewจุดสิ้นสุดซึ่งจะส่งคืนรหัส 200 (ok) ส่งคืน 401 สำหรับการส่งสัญญาณว่าเซสชันไม่ถูกต้องหรือโทเค็นหมดอายุแล้ว ในกรณีนี้ลูกค้าจะโทรหาrenewปลายทางทันทีถ้ามันคืน 200 โทเค็นจะถูกรีเฟรช แต่ถ้าrenewกลับ 401 ก็หมายความว่าไคลเอนต์ออกจากระบบ คุณจะแนะนำทางเลือกใดจากสองข้อด้านบน อันไหนจะเป็นมาตรฐานมากขึ้นเข้าใจง่ายและ / หรือสงบมากขึ้น? หรือคุณจะแนะนำวิธีการอื่นโดยสิ้นเชิง? คุณเห็นปัญหาที่ชัดเจนหรือความเสี่ยงด้านความปลอดภัยที่มีตัวเลือกอย่างใดอย่างหนึ่ง? …

6
ฉันจะสละชื่อตัวแปรที่สั้นลงสำหรับรหัส“ columned” ที่ยาวขึ้นหรือไม่
ฉันเป็นนักเขียนโปรแกรมสมัครเล่นในชั้นเรียน CS ที่พยายามเรียนรู้ทักษะการเขียนโปรแกรมที่เหมาะสม นี่คือลักษณะของรหัสของฉันขอบของมันขยายไปถึง 103 คอลัมน์ int extractMessage(char keyWord[25], char cipherText[17424], int rowSize, char message[388]) { int keyColumn = 0; int cipherColumn = 0; int offset = 1; int nextWord = 1; int lengthOfWord = 0; int lengthOfCipher = 0; lengthOfWord = length(keyWord); lengthOfCipher = length(cipherText); while (keyWord[keyColumn] != cipherText[cipherColumn]) …
17 c  coding-style 

1
ฟังก์ชั่นเครื่องกำเนิดไฟฟ้านั้นใช้งานได้ในการเขียนโปรแกรมการทำงานหรือไม่
คำถามคือ: เครื่องปั่นไฟทำลายกระบวนทัศน์การเขียนโปรแกรมการทำงานหรือไม่? ทำไมหรือทำไมไม่? ถ้าใช่สามารถใช้เครื่องกำเนิดไฟฟ้าในการเขียนโปรแกรมเชิงหน้าที่ได้อย่างไร พิจารณาสิ่งต่อไปนี้: function * downCounter(maxValue) { yield maxValue; yield * downCounter(maxValue > 0 ? maxValue - 1 : 0); } let counter = downCounter(26); counter.next().value; // 26 counter.next().value; // 25 // ...etc downCounterวิธีการปรากฏไร้สัญชาติ เช่นกันการโทรdownCounterด้วยอินพุตเดียวกันก็จะส่งผลให้ออกเหมือนกัน อย่างไรก็ตามในเวลาเดียวกันการโทรnext()ไม่ได้ผลลัพธ์ที่สอดคล้องกัน ฉันไม่แน่ใจหรือไม่ว่าเครื่องปั่นไฟทำลายกระบวนทัศน์การเขียนโปรแกรมการทำงานเพราะในตัวอย่างนี้counterเป็นวัตถุกำเนิดไฟฟ้าและอื่น ๆ โทรจะก่อให้เกิดผลเช่นเดียวกับวัตถุกำเนิดอื่นที่สร้างขึ้นด้วยเดียวกันแน่นอนnext()maxValue เช่นกันการเรียกsomeCollection[3]ใช้อาร์เรย์จะส่งคืนองค์ประกอบที่สี่เสมอ ในทำนองเดียวกันการเรียกnext()สี่ครั้งบนวัตถุตัวสร้างจะส่งคืนองค์ประกอบที่สี่เสมอ สำหรับบริบทเพิ่มเติมคำถามเหล่านี้เพิ่มขึ้นในขณะที่ทำงานในการเขียนโปรแกรมกะตะ บุคคลที่ตอบคำถามตั้งคำถามว่าเครื่องปั่นไฟสามารถใช้ในการเขียนโปรแกรมการทำงานหรือไม่และพวกเขายังคงอยู่ในสถานะ

2
การเขียนแอป Angular 2 ขนาดใหญ่พร้อมแอปขนาดเล็กหลายรายการ
หลังจากการอภิปรายและการวิจัยนาน 3 เดือนในการเลือกระหว่าง React (กับ Redux) และ Angular 2 ทีม front-end ใน บริษัท ของฉันได้สรุปว่าจะไปกับ Angular 2 (เนื่องจากมันเหมาะสมกับปัญหาของเรามากขึ้น) เราเข้าสู่ธุรกิจแอพระดับองค์กรซึ่งปัจจุบันประกอบด้วยเทคโนโลยี Front-End ที่แตกต่างกันมากมาย (ในขณะที่มีแบ็กเอนด์ RESTful ทั้งหมด) และเราต้องการแทนที่ทั้งหมดและมีเทคโนโลยีเดียวที่จะทำให้การฝึกอบรมและการควบคุมคุณภาพในอนาคตง่ายขึ้น ด้วยลักษณะของผลิตภัณฑ์ของเรามันมีมากมายและมีโมดูลอยู่ภายในซึ่งอยู่ในโดเมนอื่นและสามารถทำเป็นแอพแบบสแตนด์อโลนได้ แต่ตัวผลิตภัณฑ์นั้นใช้ URL เดียว ตัวอย่าง; เรียกผลิตภัณฑ์ของฉันเป็น SuperApp ในฐานะที่เป็น UI นั้น SuperApp มีระบบเข้าสู่ระบบมาตรฐานและการนำทางไปยังโมดูลย่อย / ผลิตภัณฑ์ย่อยเช่นเวิร์กโฟลว์ปรากฏดังต่อไปนี้ SuperApp ตรวจสอบผู้ใช้ ลืมรหัสผ่านของวิซาร์ด เข้าถึงหน้าสาธารณะโดยไม่ต้องตรวจสอบสิทธิ์ ผู้ใช้รับรองความถูกต้อง ระบบนำทาง บ้าน Sub-Product1 Sub-Product2 Sub-Product3 ข้อมูลส่วนตัว ... …

2
วิธีสร้างสถาปัตยกรรมเว็บแอปพลิเคชั่นบนเว็บแบบเรียลไทม์ที่มีน้ำหนักมาก
ในกระบวนการพัฒนาแอปพลิเคชั่นหน้าเดียวแบบเรียลไทม์ฉันได้ปรับใช้เว็บซ็อกเก็ตอย่างต่อเนื่องเพื่อช่วยให้ผู้ใช้ของฉันมีข้อมูลที่ทันสมัย ในช่วงนี้ฉันเสียใจที่สังเกตว่าฉันทำลายโครงสร้างแอปมากเกินไปและฉันไม่สามารถหาวิธีแก้ไขปรากฏการณ์นี้ได้ ก่อนที่จะทำความเข้าใจโดยเฉพาะบริบทเพียงเล็กน้อย: webapp เป็นเรียลไทม์ SPA แบ็คเอนด์อยู่ใน Ruby on Rails เหตุการณ์แบบเรียลไทม์ถูกผลักโดย Ruby ไปยังคีย์ Redis จากนั้นเซิร์ฟเวอร์ไมโครโหนดจะดึงข้อมูลกลับมาและส่งไปยัง Socket.Io; Frontend อยู่ใน AngularJS และเชื่อมต่อโดยตรงกับเซิร์ฟเวอร์ socket.io ในโหนด ที่ฝั่งเซิร์ฟเวอร์ก่อนเรียลไทม์ฉันมีตัวควบคุม / รูปแบบการแยกทรัพยากรที่ชัดเจนโดยมีการประมวลผลที่แนบมากับแต่ละ การออกแบบ MVC แบบคลาสสิกนี้ถูกทำลายอย่างสมบูรณ์หรืออย่างน้อยก็ข้ามเมื่อฉันเริ่มผลักสิ่งต่าง ๆ ผ่านเว็บซ็อกเก็ตกับผู้ใช้ของฉัน ฉันมีตอนนี้เป็นท่อเดียวที่ทั้งหมดของ app ของฉันไหลลงข้อมูลได้มากขึ้นหรือน้อยกว่าโครงสร้าง และฉันก็พบว่ามันเครียด ส่วนหน้าความกังวลหลักคือการทำซ้ำตรรกะทางธุรกิจ เมื่อผู้ใช้โหลดหน้าฉันต้องโหลดแบบจำลอง AJAX แบบดั้งเดิมของฉันผ่านสายโทรศัพท์ แต่ฉันต้องจัดการกับข้อมูลแบบเรียลไทม์ที่ท่วมท้นและฉันก็พบว่าตัวเองซ้ำซ้อนกับตรรกะทางธุรกิจฝั่งไคลเอ็นต์ของฉันเพื่อรักษาความมั่นคงของโมเดลฝั่งไคลเอ็นต์ของฉัน หลังจากการวิจัยบางอย่างฉันไม่พบบทความบทความหนังสือหรืออะไรก็ตามที่จะให้คำแนะนำเกี่ยวกับวิธีที่เราสามารถทำได้และควรออกแบบสถาปัตยกรรมของ webapp ทันสมัยโดยมีหัวข้อเฉพาะอยู่สองสามข้อ: วิธีจัดโครงสร้างข้อมูลที่ส่งจากเซิร์ฟเวอร์ไปยังผู้ใช้ ฉันควรส่งกิจกรรมเช่น "ทรัพยากรนี้ได้รับการอัปเดตแล้วและคุณควรโหลดซ้ำผ่านการโทร AJAX" หรือกดข้อมูลที่อัปเดตแล้วแทนที่ข้อมูลก่อนหน้านี้ที่โหลดผ่านการโทร AJAX ครั้งแรก วิธีการกำหนดโครงกระดูกที่สอดคล้องกันและปรับขนาดได้กับข้อมูลที่ส่ง? …

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