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

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

2
การใช้คลาสนามธรรมและอินเทอร์เฟซที่เป็นนามธรรม
แม้ว่าสิ่งนี้จะไม่ได้บังคับในมาตรฐาน C ++ แต่ดูเหมือนว่าวิธี GCC เช่นใช้คลาสผู้ปกครองรวมถึงนามธรรมที่บริสุทธิ์คือการรวมตัวชี้ไปยังตาราง v สำหรับคลาสนามธรรมนั้นในทุกอินสแตนซ์ของคำถาม . โดยปกติแล้วสิ่งนี้จะขยายขนาดของอินสแตนซ์ของคลาสนี้โดยตัวชี้สำหรับคลาสพาเรนต์ทั้งหมดที่มี แต่ฉันสังเกตเห็นว่าคลาส C และโครงสร้างจำนวนมากมีอินเทอร์เฟซหลักมากมายซึ่งโดยทั่วไปแล้วเป็นคลาสนามธรรมที่บริสุทธิ์ ฉันจะแปลกใจถ้าทุกครั้งที่พูดDecimalถูกป่องด้วย 6 ตัวชี้ไปยังทุกมันเป็นอินเทอร์เฟซต่าง ๆ ดังนั้นถ้า C # ทำอินเตอร์เฟสแตกต่างกันอย่างน้อยในการใช้งานทั่วไป (ฉันเข้าใจว่ามาตรฐานตัวเองอาจไม่ได้กำหนดการนำไปใช้) และการใช้งาน C ++ มีวิธีหลีกเลี่ยงการขยายขนาดวัตถุเมื่อเพิ่มผู้ปกครองเสมือนบริสุทธิ์ให้กับชั้นเรียนหรือไม่?

5
การจับ / การโยนข้อยกเว้นทำให้วิธีการที่บริสุทธิ์นั้นไม่บริสุทธิ์หรือไม่?
ตัวอย่างโค้ดต่อไปนี้ให้บริบทกับคำถามของฉัน คลาสของห้องพักถูกเตรียมใช้งานด้วยผู้รับมอบสิทธิ์ ในการดำเนินการครั้งแรกของคลาสห้องไม่มีผู้คุมที่ได้รับมอบหมายที่โยนข้อยกเว้น ข้อยกเว้นดังกล่าวจะทำให้เกิดฟองขึ้นไปยังสถานที่ให้บริการภาคเหนือซึ่งมีการประเมินผู้ได้รับมอบหมาย (หมายเหตุ: วิธีการหลัก () แสดงให้เห็นถึงวิธีการที่อินสแตนซ์ของห้องพักจะใช้ในรหัสลูกค้า): public sealed class Room { private readonly Func<Room> north; public Room(Func<Room> north) { this.north = north; } public Room North { get { return this.north(); } } public static void Main(string[] args) { Func<Room> evilDelegate = () => { throw new Exception(); …

6
เปรียวโดยไม่ต้องทดสอบหน่วย
มันสมเหตุสมผลหรือไม่ที่จะพูดถึง "การพัฒนาที่คล่องตัว" หรืออ้างว่าคุณกำลังใช้ "วิธีการที่คล่องตัว" ถ้ารหัสฐานที่คุณกำลังทำงานอยู่มีการครอบคลุมการทดสอบหน่วย 0% (และคุณในฐานะทีมไม่ได้ทำอะไรเกี่ยวกับเรื่องนี้) เพื่อให้ชัดเจน: สำหรับฉันมันไม่สมเหตุสมผล จากประสบการณ์ส่วนตัวของฉันฉันพบว่าการทดสอบหน่วยเป็นเครื่องมือเดียวที่ช่วยให้คุณ "คล่องแคล่ว" (เช่นตอบสนองต่อการเปลี่ยนแปลงปรับปรุงการออกแบบของคุณแบ่งปันความรู้ ฯลฯ ) และ TDD เป็นวิธีปฏิบัติเดียวที่จะพาคุณไปที่นั่น . อาจมีวิธีอื่นบ้าง แต่ฉันก็ยังไม่เห็นว่าพวกเขาจะทำงานได้อย่างไร

2
REST API ตามบทบาทหรือไม่
ฉันกำลังสร้าง REST API ซึ่งผู้ใช้หลายคนที่มีบทบาทที่แตกต่างกันจะสามารถเข้าถึงทรัพยากรที่มีอยู่ เพื่อให้ขอบเขตง่ายขึ้นขอโดเมน "นักเรียน / ครู / ชั้นเรียน": GET /students เป็นทรัพยากรที่จะเข้าถึง ผู้ใช้อาจมีบทบาทเช่นนักเรียนและ / หรืออาจารย์ นักเรียนจะสามารถเข้าถึงนักเรียนของชั้นเรียนของพวกเขาเท่านั้น ครูจะสามารถเข้าถึงนักเรียนของชั้นเรียนที่พวกเขาสอน การใช้งานบางอย่างอาจเป็นนักเรียนและสอนชั้นเรียนอื่น ๆ ด้วย พวกเขาจะต้องสามารถเข้าถึงนักเรียนของชั้นเรียนของพวกเขาและนักเรียนของชั้นเรียนที่พวกเขาสอน นึกคิดฉันต้องการที่จะใช้สิ่งนี้เป็นสองฟังก์ชั่น - หนึ่งต่อบทบาทและจากนั้น "สหภาพ" ถ้าผู้ใช้มีหลายบทบาท คำถามของฉันคือฉันควรใช้รูปแบบใดในการดำเนินการนี้ อย่างผิวเผิน ฉันควรแยก API ต่อบทบาทของฉันหรือไม่ GET /teacher/studentsและGET /student/studentsดูเหมือนจะไม่ถูกต้องสำหรับฉัน เก็บทุกอย่างฉันเป็นแหล่งข้อมูลเดียว (แนะนำ) ภายใน ควรนำไปใช้ภายในอย่างไร ทุกวิธีควรเริ่มต้นด้วยสวิตช์ขนาดใหญ่ / ต่อบทบาทหรือไม่ ฉันควรใช้ที่เก็บต่อบทบาทหรือไม่ มีรูปแบบการออกแบบที่จะช่วยฉันในการบรรลุเป้าหมายนี้หรือไม่? ตามความเห็นด้านข้าง: ฉันใช้ASP.NET Web APIและEntity Framework 6แต่จริงๆแล้วมันไม่สำคัญสำหรับการนำแนวคิดไปใช้

2
ความแตกต่างระหว่าง function () และ function (void) คืออะไร?
ฉันเคยได้ยินว่ามันเป็นวิธีปฏิบัติที่ดีในการเขียนฟังก์ชั่นที่ไม่ได้รับอะไรเป็นพารามิเตอร์เช่นนี้: int func(void); แต่ฉันได้ยินว่าวิธีที่ถูกต้องในการแสดงออกเช่นนี้: int func(); ความแตกต่างระหว่างการประกาศฟังก์ชั่นทั้งสองนี้ในทั้ง C และ C ++ คืออะไร?

3
วิธีการจัดเก็บข้อมูลชุดข้อมูลขนาดใหญ่ได้อย่างมีประสิทธิภาพ
ฉันต้องการจัดเก็บและสามารถสืบค้นข้อมูลอนุกรมเวลาจำนวนมากได้ คุณสมบัติของข้อมูลมีดังนี้: จำนวนซีรีส์: ประมาณ 12.000 (หนึ่งหมื่นสองพัน) จำนวนจุดข้อมูลทั่วโลก: ประมาณ 500,000 ต่อเดือน (ห้าร้อยล้าน) ประเภทค่าผสม: จุดข้อมูลส่วนใหญ่เป็นค่าจุดลอยตัวส่วนที่เหลือเป็นสตริง ระยะเวลาการสุ่มตัวอย่าง: ตัวแปรระหว่างซีรี่ส์และภายในซีรี่ส์ การประทับเวลา: ความแม่นยำมิลลิวินาที ระยะเวลาการเก็บข้อมูล: หลายปีโดยไม่มีการลดลงหรือการสุ่มตัวอย่าง คลังข้อมูลจะต้องถูกสร้างขึ้นในแบบเรียลไทม์ แต่มีความล่าช้าพอสมควร (~ 1 ชั่วโมง) เป็นที่ยอมรับ ข้อมูลที่ผ่านมาสามารถสร้างใหม่ได้ถ้าต้องการ แต่มีค่าใช้จ่ายสูง บางครั้ง แต่ค่อนข้างน้อยข้อมูลในอดีตบางอย่างจำเป็นต้องได้รับการอัปเดต คุณสมบัติของข้อความค้นหาที่จินตนาการ: ข้อความค้นหาส่วนใหญ่ที่มีข้อมูลจะเป็นแบบสอบถามแบบอิงตามเวลา ตั้งแต่วันหนึ่งถึงหลายเดือน / ปี 90% + จะสอบถามเกี่ยวกับข้อมูลล่าสุด ข้อกำหนดอื่น ๆ : การแก้ปัญหาจะต้องเป็นฟรีในเบียร์ฟรีและโอเพนซอร์สโดยเฉพาะอย่างยิ่ง ความคิดเริ่มต้นของฉันคือการใช้ PyTables / Pandas กับไฟล์ HDF5เพื่อเก็บแบ็คเอนด์แทนฐานข้อมูล SQL คำถาม: สมมติว่า …

3
การจัดการกับแคชเบราว์เซอร์ในแอพหน้าเดียว
ฉันกำลังพยายามหาวิธีจัดการแคชของเว็บเบราว์เซอร์สำหรับแอปหน้าเดียวอย่างถูกต้อง ฉันมีการออกแบบที่ค่อนข้างธรรมดา: ไฟล์ HTML, JS และ CSS หลายตัวที่ใช้งานสปาและมีข้อมูล JSON มากมายที่สปาใช้ ปัญหาเกิดขึ้นเมื่อฉันต้องการผลักดันการอัปเดต: ฉันอัปเดตส่วนคงที่ของเว็บไซต์และรหัสที่สร้าง JSON ในเวลาเดียวกัน แต่เบราว์เซอร์ไคลเอนต์มักจะมีส่วนคงที่แคชดังนั้นรหัสเก่าพยายามประมวลผลข้อมูลใหม่และ อาจ (ขึ้นอยู่กับการเปลี่ยนแปลงที่ทำ) อาจมีปัญหา (โดยเฉพาะอย่างยิ่งดูเหมือนว่า IE จะก้าวร้าวมากกว่า Chrome หรือ Firefox เกี่ยวกับการใช้แคช JS โดยไม่ต้องทำการตรวจสอบซ้ำ) วิธีที่ดีที่สุดในการจัดการกับสิ่งนี้คืออะไร? ตรวจสอบให้แน่ใจว่าการเปลี่ยนแปลง JSON ของฉันเข้ากันได้ย้อนหลังและถือว่าแคชของเบราว์เซอร์จะหมดอายุในระยะเวลาที่เหมาะสม ฝังหมายเลขรุ่นบางส่วนในทั้ง JS แบบคงที่และ JSON จากนั้นเรียกใช้งานwindow.location.reload(true);หากไม่ตรงกัน ค้นหาชุดค่าผสมที่เหมาะสมของส่วนหัว ( must-revalidateหรือno-cacheอะไรก็ตามแหล่งที่มา แตกต่างกันไปตามวิธีการทำ) เพื่อให้แน่ใจว่าเบราว์เซอร์จะตรวจสอบความถูกต้องของทรัพยากรทั้งหมดในทุก ๆ ครั้งที่โหลดซ้ำแม้ว่ามันจะหมายถึง จัดการการควบคุมแคชของฉันและหมดอายุส่วนหัวเพื่อให้เนื้อหาแบบคงที่หมดอายุเมื่อฉันต้องการผลักดันการอัปเดต อื่น ๆ อีก?

7
การทบทวน Peer / Code ผิดหวัง
ฉันจะไม่เรียกตัวเองว่าเป็นนักแสดงระดับแนวหน้า แต่เป็นคนที่ค่อนข้างมีประสบการณ์ ฉันพยายามที่จะรักษาคุณภาพของโค้ดให้อยู่ในระดับสูงและมองหาวิธีการปรับปรุงสไตล์การเขียนโค้ดของฉันอยู่เสมอพยายามที่จะทำให้โค้ดมีประสิทธิภาพอ่านง่ายและสม่ำเสมอรวมทั้งสนับสนุนให้ทีมทำตามรูปแบบและวิธีการ ฉันยังเข้าใจถึงความจำเป็นของความสมดุลระหว่างทั้งคุณภาพและความเร็ว เพื่อให้บรรลุเป้าหมายนี้ฉันได้แนะนำแนวคิดเรื่องการตรวจสอบโดยเพื่อนร่วมทีมของฉัน ยกนิ้วขึ้นสองนิ้วใน GitHub ดึงคำขอสำหรับการผสาน ยอดเยี่ยม - แต่ไม่ใช่ในความคิดของฉันหากปราศจากอาการสะอึก ฉันมักจะเห็นความเห็นทบทวนเพื่อนร่วมงานจากเพื่อนร่วมงานเดียวกันเช่น - คงจะเป็นการดีถ้าจะเพิ่มช่องว่างหลังจากนั้น <INSERT SOMETHING HERE> บรรทัดที่ไม่ต้องการพิเศษระหว่างเมธอด ควรใช้การหยุดแบบเต็มเมื่อสิ้นสุดความคิดเห็นใน docblock ตอนนี้จากมุมมองของฉัน - ผู้ตรวจทานมองเผินๆเกี่ยวกับความสวยงามของรหัส - และไม่ได้ทำการตรวจสอบโค้ด การตรวจสอบรหัสเครื่องสำอางทำให้ฉันมีความคิดที่หยิ่งผยอง / ชนชั้นนำ มันขาดสาร แต่คุณไม่สามารถจริงๆเถียงมากเกินไปกับมันเพราะวิจารณ์เป็นเทคนิคที่ถูกต้อง ฉันจะค่อนข้างจะเห็นน้อยกว่าความคิดเห็นประเภทข้างต้นและความคิดเห็นเพิ่มเติมดังนี้: คุณสามารถลดความซับซ้อนของวัฏจักรโดย ... ออกจากต้นและหลีกเลี่ยงถ้า / อื่น สรุปแบบสอบถาม DB ของคุณไปยังที่เก็บ ตรรกะนี้ไม่ได้อยู่ที่นี่จริงๆ อย่าทำซ้ำตัวเอง - นามธรรมและนำมาใช้ใหม่ อะไรจะเกิดขึ้นถ้าXถูกส่งผ่านเป็นอาร์กิวเมนต์วิธีY? การทดสอบหน่วยสำหรับสิ่งนี้อยู่ที่ไหน ฉันพบว่าเป็นคนประเภทเดียวกันที่ให้ความเห็นประเภทเครื่องสำอางและผู้คนประเภทเดียวกันซึ่งในความคิดเห็นของฉันให้ความเห็นแบบ "Quality & Logic" อะไรคือวิธีที่ถูกต้องในการตรวจสอบโดยเพื่อน …

6
วิธีการสกัดเทียบกับสมมติฐาน
เมื่อฉันแยกวิธีการขนาดใหญ่ (หรือขั้นตอนหรือฟังก์ชั่น - คำถามนี้ไม่เฉพาะเจาะจงกับ OOP แต่เนื่องจากฉันทำงานในภาษา OOP 99% ของเวลามันเป็นคำศัพท์ที่ฉันรู้สึกสบายใจที่สุด) เป็นคำเล็ก ๆ ฉันมักจะพบว่าตัวเองไม่พอใจกับผลลัพธ์ มันยากที่จะให้เหตุผลเกี่ยวกับวิธีการขนาดเล็กเหล่านี้มากกว่าเมื่อพวกเขาเป็นเพียงบล็อกของรหัสในใหญ่เพราะเมื่อฉันแยกพวกเขาฉันสูญเสียสมมติฐานพื้นฐานมากมายที่มาจากบริบทของผู้โทร ต่อมาเมื่อฉันดูรหัสนี้และดูวิธีการต่าง ๆ ฉันไม่รู้ทันทีว่าพวกเขาจะเรียกจากที่ไหนและคิดว่าเป็นวิธีการส่วนตัวแบบธรรมดาที่สามารถเรียกได้จากทุกที่ในไฟล์ ตัวอย่างเช่นลองจินตนาการถึงวิธีการเริ่มต้น (ตัวสร้างหรืออื่น ๆ ) แบ่งออกเป็นชุดของตัวเล็ก: ในบริบทของวิธีการเองคุณรู้ชัดเจนว่าสถานะของวัตถุนั้นยังคงไม่ถูกต้อง แต่ในวิธีส่วนตัวปกติคุณอาจไปจากสมมติฐานว่าวัตถุนั้น เริ่มต้นแล้วและอยู่ในสถานะที่ถูกต้อง ทางออกเดียวที่ฉันเคยเห็นคือwhereclause ใน Haskell ซึ่งช่วยให้คุณกำหนดฟังก์ชันขนาดเล็กที่ใช้เฉพาะในฟังก์ชัน "parent" โดยทั่วไปดูเหมือนว่านี้: len x y = sqrt $ (sq x) + (sq y) where sq a = a * a แต่ภาษาอื่นที่ฉันใช้ไม่มีอะไรแบบนี้ - …

8
เป็นไปได้ที่จะทำนายแบบคงที่เมื่อมีการจัดสรรคืนหน่วยความจำ --- จากซอร์สโค้ดเท่านั้นหรือไม่
หน่วยความจำ (และล็อคทรัพยากร) จะถูกส่งคืนไปยังระบบปฏิบัติการที่จุดที่กำหนดไว้ระหว่างการทำงานของโปรแกรม โฟลว์การควบคุมของโปรแกรมด้วยตัวเองนั้นเพียงพอที่จะรู้ว่าสามารถจัดสรรคืนทรัพยากรที่กำหนดได้อย่างแน่นอน เช่นเดียวกับที่โปรแกรมเมอร์มนุษย์รู้จักที่จะเขียนfclose(file)เมื่อทำโปรแกรมด้วย GCs แก้ปัญหานี้โดยการหาโดยตรงระหว่างรันไทม์เมื่อโฟลว์ควบคุมถูกดำเนินการ แต่แหล่งที่แท้จริงของความจริงเกี่ยวกับการควบคุมการไหลคือแหล่งที่มา ในทางทฤษฎีมันควรจะเป็นไปได้ที่จะกำหนดตำแหน่งที่จะแทรกการfree()เรียกก่อนที่จะรวบรวมโดยการวิเคราะห์แหล่งที่มา (หรือ AST) การนับการอ้างอิงเป็นวิธีที่ชัดเจนในการใช้สิ่งนี้ แต่ก็เป็นเรื่องง่ายที่จะพบกับสถานการณ์ที่ตัวชี้ยังคงอ้างอิง (ยังอยู่ในขอบเขต) แต่ไม่ต้องการอีกต่อไป สิ่งนี้เพียงแปลงความรับผิดชอบของการยกเลิกการจัดสรรพอยน์เตอร์ด้วยตนเองเป็นความรับผิดชอบในการจัดการขอบเขต / การอ้างอิงด้วยตนเองกับพอยน์เตอร์เหล่านั้น ดูเหมือนว่าเป็นไปได้ที่จะเขียนโปรแกรมที่สามารถอ่านซอร์สของโปรแกรมและ: ทำนายการเรียงสับเปลี่ยนทั้งหมดของโฟลว์การควบคุมของโปรแกรม --- ไปยังความแม่นยำที่คล้ายกันในขณะที่ดูการทำงานจริงของโปรแกรม ติดตามการอ้างอิงทั้งหมดไปยังทรัพยากรที่จัดสรร สำหรับการอ้างอิงแต่ละครั้งให้ตรวจสอบการไหลของการควบคุมที่ตามมาทั้งหมดเพื่อหาจุดเริ่มต้นที่การอ้างอิงนั้นรับประกันว่าจะไม่ถูกยกเลิกการลงทะเบียน ณ จุดนั้นให้แทรกคำสั่งจัดสรรคืนที่บรรทัดของซอร์สโค้ด มีอะไรอีกไหมที่ทำสิ่งนี้แล้ว? ฉันไม่คิดว่าตัวชี้สมาร์ท Rust หรือ C ++ / RAII เป็นสิ่งเดียวกัน
27 parsing  memory 

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

3
เหตุใดจึงไม่“ fat ไบนารี” ใช้กันอย่างแพร่หลายสำหรับแอปพลิเคชันข้ามแพลตฟอร์ม
เท่าที่ฉันรู้เรียกว่า "fat ไบนารี" - ไฟล์ปฏิบัติการที่มีรหัสเครื่องสำหรับหลายระบบ - ใช้เฉพาะกับ Apple PC เท่านั้นและดูเหมือนว่าพวกเขาใช้เพียงเพราะพวกเขาต้องการเปลี่ยนจาก PowerPC ถึง x86 ทุกวันนี้ซอฟต์แวร์จำนวนมากข้ามแพลตฟอร์มและดูเหมือนว่าการสร้างไบนารีไขมันเพียงครั้งเดียวจะทำได้ง่ายกว่าการติดตามการดาวน์โหลดหลายโหลหรือหลายครั้งที่แตกต่างกันสำหรับการรวมกันของระบบปฏิบัติการและสถาปัตยกรรมแต่ละครั้ง ให้กับลูกค้าที่พวกเขาต้องการ ฉันสามารถคาดเดาได้มากมายว่าทำไมวิธีการนี้ถึงไม่ติดเช่น: การขาดเครื่องมือการคอมไพล์ข้ามการทำให้ไบนารีหลายระบบเป็นไปไม่ได้ คุณต้องทดสอบรหัสในแต่ละระบบปฏิบัติการดังนั้นคุณต้องมีระบบที่สามารถรวบรวมได้ในแต่ละระบบปฏิบัติการ เห็นได้ชัดว่าโปรแกรม 32 บิต "เพิ่งใช้งาน" ในเครื่อง 64 บิตแล้ว การลิงก์แบบไดนามิกทำงานแตกต่างกันไปในแต่ละระบบปฏิบัติการดังนั้น "ไลบรารีไขมัน" อาจไม่ทำงานแม้ว่าจะมี "แอปพลิเคชันอ้วน" แต่เนื่องจากฉันทำงานกับไลบรารีหรือกรอบงานที่ซ่อนรายละเอียดเฉพาะระบบปฏิบัติการและสถาปัตยกรรมเฉพาะทั้งหมดเหล่านี้จากฉันฉันจึงไม่ทราบว่าเป็นเรื่องจริงเพียงใดหรือถ้ามีปัญหามากขึ้นฉันก็ไม่รู้ เกี่ยวกับ ดังนั้นอะไรคือเหตุผลที่แท้จริงว่าทำไมไบนารีไขมันจึงไม่ถูกใช้โดยทั่วไปในการสร้างซอฟต์แวร์หลายสถาปัตยกรรมและ / หรือระบบปฏิบัติการหลายระบบ? (นอก Apple)

3
ฉันควรวางใบขับขี่ไว้ในที่ใด
ฉันเป็นผู้พัฒนารุ่นน้องที่กำลังทำงานเกี่ยวกับการเขียนอัปเดตสำหรับซอฟต์แวร์ที่รับข้อมูลจากโซลูชันของบุคคลที่สามจัดเก็บไว้ในฐานข้อมูลจากนั้นกำหนดเงื่อนไขข้อมูลสำหรับการใช้งานโดยโซลูชันของ บริษัท อื่น ซอฟต์แวร์ของเราทำงานเป็นบริการ Windows ดูรหัสจากรุ่นก่อนหน้าฉันเห็นสิ่งนี้: static Object _workerLocker = new object(); static int _runningWorkers = 0; int MaxSimultaneousThreads = 5; foreach(int SomeObject in ListOfObjects) { lock (_workerLocker) { while (_runningWorkers >= MaxSimultaneousThreads) { Monitor.Wait(_workerLocker); } } // check to see if the service has been stopped. If yes, then …
27 c#  .net  concurrency  locks 

3
อะไรทำให้ BEM ดีกว่าการใช้ภาษาชีทสไตล์ที่สามารถซ้อนได้เช่น LESS
เพื่อนร่วมงานของฉันกำลังผลักดันวิธีการ BEM ( Block Element Modifier ) สำหรับ CSS ในโครงการที่เขากำลังช่วยเหลือและฉันไม่สามารถเข้าใจได้ว่าอะไรทำให้ดีกว่า LESS CSS ที่เราเขียนมาหลายปี เขาอ้างว่า "ประสิทธิภาพที่สูงขึ้น" แต่ฉันไม่สามารถจินตนาการได้ว่าประสิทธิภาพจะมีความสำคัญต่อแอพพลิเคชั่นบนเว็บชนิดใดที่เราเขียนในร้านรหัสนี้ เราไม่ได้สร้าง Twitter หรือ Facebook ที่นี่ ฉันจะแปลกใจมากถ้าแอปที่ใช้งานสูงสุดของเรามียอดดาวน์โหลดมากกว่า 10,000 ครั้งต่อเดือนและส่วนใหญ่ต่ำกว่า 1,000 รายการ เขาอ้างว่า "อ่านง่าย" และ "นำกลับมาใช้ใหม่" แต่ LESS นั้นทำได้ดีกว่ามากในความคิดของฉัน และฉันรู้สึกว่า BEM จะทำให้การอัปเดตเป็นไปอย่างไม่ดีนักโดยมีอักขระพิเศษหลายสิบตัวที่อุทิศให้กับชื่อคลาสที่ยาวมากเหล่านี้ซึ่งมันลดการอ่านได้อย่างรุนแรง เขาอ้างว่า "CSS ที่ซ้อนกันเป็นรูปแบบต่อต้าน" "anti-pattern" หมายถึงอะไรและทำไม CSS ที่ซ้อนกันไม่ดี? เขาอ้างว่า "ทุกคนกำลังมุ่งสู่การใช้ BEM ดังนั้นเราควรทำเช่นกัน" เคาน์เตอร์ของฉันคือ "ถ้าทุกคนกระโดดจากสะพานคุณจะติดตามหรือไม่" แต่เขาก็ยังยืนกรานอย่างเต็มที่ในเรื่องนี้ …
27 css  less 

3
สร้างเว็บแอปในฝั่งเซิร์ฟเวอร์กับฝั่งไคลเอ็นต์กับลูกผสมหรือไม่ [ปิด]
ขณะนี้มีหลายวิธีในการสร้างเว็บแอปพลิเคชัน: 1. ฝั่งเซิร์ฟเวอร์เท่านั้น นี่เป็นวิธีการแบบคลาสสิกที่คุณแสดงหน้าเว็บบนเซิร์ฟเวอร์โดยเฟรมเวิร์กเว็บเช่น Ruby on Rails, Django, Express, Play! กรอบงานและอื่น ๆ เวิร์กโฟลว์ทั่วไป : สร้างตรรกะทางธุรกิจรุ่นและมุมมองแม่แบบทั้งหมดของคุณบนเซิร์ฟเวอร์ในกรอบที่คุณเลือก 2. ฝั่งไคลเอ็นต์ + REST API ไม่นานมานี้ชุมชนเว็บโดยรวมเริ่มสร้างแอปพลิเคชันฝั่งไคลเอ็นต์ใน Angular, Backbone, Ember และเฟรมเวิร์ก JavaScript MV * อื่น ๆ อีกสองสามโหล และตอนนี้เรายังมี React.js เข้าร่วมปาร์ตี้ ปรับปรุง : ไม่มีความเข้าใจผิด สิ่งที่ฉันหมายถึงโดยลูกค้าฝั่งเดียวคือการแยกความกังวลอย่างสมบูรณ์ คุณมีเซิร์ฟเวอร์ REST API และแอปพลิเคชันฝั่งไคลเอ็นต์ที่พูดคุยกับเซิร์ฟเวอร์นั้น ขึ้นอยู่กับกรณีการใช้งานของคุณมีความเป็นไปได้ที่คุณจะไม่มีแอปพลิเคชันฝั่งไคลเอ็นต์จริงที่ไม่ได้เชื่อมต่อกับแบ็คเอนด์อย่างใดอย่างหนึ่งสำหรับการตรวจสอบสิทธิ์หรือการคงอยู่ของข้อมูล เวิร์กโฟลว์ทั่วไป : ใช้เวลาเป็นชั่วโมงตัดสินใจเลือก Angular vs Backbone กับ …

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