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

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

2
ทำไมสำหรับแต่ละคนมีเครื่องหมายทวิภาคแทนที่จะเป็น "ใน"
จากคู่มือภาษา Java 5 : เมื่อคุณเห็นเครื่องหมายจุดคู่ (:) อ่านเป็น "ใน" ทำไมไม่ใช้inตั้งแต่แรกล่ะ? สิ่งนี้บักฉันมาหลายปีแล้ว เพราะมันไม่สอดคล้องกับภาษาที่เหลือ ยกตัวอย่างเช่นใน Java มีimplements, extends, superสำหรับความสัมพันธ์ระหว่างชนิดแทนสัญลักษณ์เช่นใน C ++, Scala หรือทับทิม ใน Java ลำไส้ใหญ่ใช้ใน 5 บริบท ทั้งสามได้รับมรดกจากซีและอีกสองคนได้รับการรับรองโดย Joshua Bloch อย่างน้อยนั่นก็คือเขาพูดในระหว่างการพูดคุยเรื่อง "การปิดการทะเลาะวิวาท" สิ่งนี้เกิดขึ้นเมื่อเขาวิพากษ์วิจารณ์การใช้งานโคลอนสำหรับการทำแผนที่ไม่สอดคล้องกับความหมายในแต่ละครั้ง ซึ่งสำหรับฉันดูเหมือนว่าแปลกเพราะมันเป็นรูปแบบที่คาดหวังสำหรับแต่ละทารุณกรรม กดไลค์list_name/category: elementsหรือlaberl/term: meaning ฉันสอดแนมรอบ jcp และ jsr แต่ไม่พบว่าไม่มีเครื่องหมายของรายการส่งเมล ไม่พบการสนทนาในเรื่องนี้โดย google forเพียงมือใหม่สับสนโดยความหมายของลำไส้ใหญ่ ข้อโต้แย้งหลักต่อที่inมีให้: ต้องการคำหลักใหม่ และ lexing ซับซ้อน ลองดูคำจำกัดความของไวยากรณ์ที่เกี่ยวข้อง: คำให้การ …
9 java 

1
การออกแบบรหัส: การมอบหมายหน้าที่ตามอำเภอใจ
ใน PPCG เรามักจะมีความท้าทายKing of the Hillซึ่งทำให้บ็อตโค้ดแตกต่างกัน เราไม่ต้องการ จำกัด การท้าทายเหล่านี้ในภาษาเดียวดังนั้นเราจึงทำการสื่อสารข้ามแพลตฟอร์มผ่าน I / O มาตรฐาน เป้าหมายของฉันคือการเขียนเฟรมเวิร์กที่ผู้เขียนท้าทายจะสามารถใช้ในการเขียนการท้าทายเหล่านี้ได้ง่ายขึ้น ฉันได้ทำตามข้อกำหนดต่อไปนี้แล้วฉันต้องการที่จะปฏิบัติตาม: ที่นักเขียนท้าทายคือสามารถที่จะทำให้ชั้นเรียนที่วิธีการเป็นตัวแทนของแต่ละการสื่อสารที่แตกต่างกัน ตัวอย่างเช่นในการท้าทายGood vs Evilของเราผู้เขียนจะสร้างPlayerคลาสที่มีabstract boolean vote(List<List<Boolean>> history)วิธีการ คอนโทรลเลอร์สามารถให้อินสแตนซ์ของคลาสด้านบนที่สื่อสารผ่าน I / O มาตรฐานเมื่อเรียกเมธอดที่กล่าวมาแล้ว ที่กล่าวว่าอินสแตนซ์ทั้งหมดของคลาสข้างต้นไม่จำเป็นต้องสื่อสารผ่าน I / O มาตรฐาน 3 ของบอตอาจเป็นบ็อต Java ดั้งเดิม (นั่นก็แค่แทนที่Playerคลาสที่อีก 2 อยู่ในภาษาอื่น) เมธอดจะไม่มีอาร์กิวเมนต์จำนวนเท่ากันเสมอ (และจะไม่มีค่าตอบแทน) ฉันต้องการนักเขียนที่ท้าทายต้องทำงานให้น้อยที่สุดเท่าที่จะทำได้เพื่อทำงานกับกรอบงานของฉัน ฉันไม่ได้ใช้การสะท้อนเพื่อแก้ไขปัญหาเหล่านี้ ฉันได้พิจารณาให้ผู้เขียนผู้ท้าทายทำสิ่งต่อไปนี้: class PlayerComm extends Player { private …

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

3
ฟังก์ชั่นการรับค่าจากฟังก์ชั่นอื่นถือว่าบริสุทธิ์หรือไม่
ฉันกำลังพยายามหาวิธีจัดการกับค่าตัวแปรเริ่มต้นเมื่อสร้างฟังก์ชั่นที่ไม่มีผลข้างเคียงและสิ้นสุดลงด้วยสิ่งต่อไปนี้: function getDefaultSeparator() { return ':'; } function process(input, separator) { var separator = separator || getDefaultSeparator(); // Use separator in some logic return output; } ตัวคั่นเริ่มต้นจะใช้ในฟังก์ชั่นอื่นและฉันต้องการกำหนดไว้ในที่เดียวเท่านั้น หากนี่คือฟังก์ชั่นที่บริสุทธิ์ความแตกต่างจากการใช้ค่าคงที่ DEFAULT_SEPARATOR ทั่วโลกแทนคืออะไร

1
สถาปัตยกรรมคอมพิวเตอร์ไม่ได้ขึ้นอยู่กับอาร์เรย์ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว เอกสารต้นฉบับของ Wadler ใน Monads for Functional Programming (Haskell) เขากล่าว อีกคำถามหนึ่งที่มีประวัติอันยาวนานก็คือมันเป็นที่ต้องการของโปรแกรมพื้นฐานในการอัพเดทอาร์เรย์หรือไม่ เนื่องจากความพยายามอย่างมากในการพัฒนาอัลกอริธึมและสถาปัตยกรรมบนพื้นฐานของอาร์เรย์เราจะหลีกเลี่ยงการอภิปรายนี้และเพียงแค่คิดว่าคำตอบคือใช่ ไม่มีการอ้างอิงหรือคำใบ้สำหรับสถาปัตยกรรมที่เป็นไปได้อื่น ๆ ฉันเคยได้ยินบางสิ่งเกี่ยวกับสถาปัตยกรรมที่เหมาะกับ Lisp ใครช่วยกรุณาแนะนำฉันด้วยคำอธิบายและคำแนะนำเกี่ยวกับที่ไหน / ฉันสามารถเริ่มต้นในหัวข้อนี้ ฉันซาบซึ้งมากที่คุณสามารถอธิบายสถาปัตยกรรมที่แตกต่างกันในเวลาสั้น

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

1
ในรูปแบบ MVP ควรดูตัวอย่างวัตถุต้นแบบตามเนื้อหา UI หรือเพียงแค่ส่งเนื้อหาเหล่านี้เป็นพารามิเตอร์ไปยังผู้นำเสนอ
ฉันใช้รูปแบบ MVP ในแอพ android ที่ฉันกำลังพัฒนา ฉันมีองค์ประกอบ 4 อย่าง: AddUserView ที่สามารถเพิ่มผู้ใช้ใหม่: AddUserPresenter The UserInfo (the pojo) UserInfoManager (ตรรกะ businness และผู้จัดการหน่วยเก็บข้อมูล) คำถามของฉันคือ: เมื่อฉันกดปุ่ม "เพิ่ม" ใน AddUserView มันควรจะได้รับเนื้อหาของ textviews ยกตัวอย่าง UserInfo ใหม่และส่งต่อไปยัง Presenter หรือ AddUserView ควรรับเนื้อหา textViews และส่งไปยัง AddUserPresenter ซึ่งอันที่จริงแล้วจะยกตัวอย่าง UserInfo และส่งต่อไปยัง UserInfoManager

1
ธนาคารใช้อะไรเป็นประเภทข้อมูลเพื่อเงิน [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันตระหนักถึงตัวเลือกที่ดีบางอย่าง : จำนวนเต็มขนาดใหญ่ (เช่น int64_t, mpz_t, bignum libใด ๆ) เพื่อเป็นตัวแทนเซ็นต์หรือ 10 -nเซนต์ - พูดจำนวนเต็มแทน 1/100 ของเงิน ($ 1.05 == 10500) นี้เรียกว่าจำนวนเต็มปรับขนาด ไลบรารีระดับสูงสำหรับเลขทศนิยมทศนิยมที่มีความแม่นยำเช่นBigDecimalใน Java, Decimal ใน Python, decimal.js ใน Javascript, boost :: multiprecision ใน C ++ เงื่อนไข BCD ที่อัดแน่น (ทศนิยมด้วยรหัสไบนารี) เป็นวิธีที่ลึกลับกว่าซึ่งดูเหมือนจะเป็นที่นิยมในซอฟต์แวร์เก่า อ่าน เพิ่มเติม เกี่ยวกับเรื่องนี้ …

4
วิธีถกเถียงกับแนวคิด "สาธารณะอย่างสมบูรณ์" ของการออกแบบคลาสอ็อบเจ็กต์ทางธุรกิจ
เราทำการทดสอบหน่วยและการปรับโครงสร้างวัตถุทางธุรกิจของเราอีกมากมายและดูเหมือนว่าฉันมีความคิดเห็นที่แตกต่างกันมากในการออกแบบชั้นเรียนมากกว่าเพื่อนคนอื่น ๆ ตัวอย่างคลาสที่ฉันไม่ใช่แฟนของ: public class Foo { private string field1; private string field2; private string field3; private string field4; private string field5; public Foo() { } public Foo(string in1, string in2) { field1 = in1; field2 = in2; } public Foo(string in1, string in2, string in3, string in4) { field1 …

2
ค่อยๆย้าย codebase ไปยังคอนเทนเนอร์ฉีดที่ต้องพึ่งพา
ฉันมี codebase ขนาดใหญ่ที่มีซิงเกิล "anti-pattern" จำนวนมากคลาสยูทิลิตี้ที่มีวิธีการคงที่และคลาสที่สร้างการอ้างอิงของตนเองโดยใช้newคำหลัก มันทำให้รหัสยากมากที่จะทดสอบ ฉันต้องการที่จะโยกย้ายรหัสไปยังภาชนะฉีดพึ่งพา (ในกรณีของฉันมันGuiceเพราะมันเป็นGWTโครงการ) จากความเข้าใจของฉันเกี่ยวกับการฉีดขึ้นอยู่กับมันทั้งหมดหรือเปล่า คลาสทั้งหมดได้รับการจัดการโดย Spring / Guice หรือไม่ เนื่องจาก codebase มีขนาดใหญ่ฉันไม่สามารถแปลงรหัสข้ามคืนได้ ดังนั้นฉันต้องการวิธีที่จะทำมันค่อยๆ ปัญหาคือเมื่อฉันเริ่มต้นด้วยคลาสที่ต้องถูกฉีดเข้าไปในคลาสอื่นฉันไม่สามารถใช้วิ@Injectในคลาสเหล่านั้นได้เนื่องจากคลาสเหล่านั้นยังไม่ได้รับการจัดการโดยคอนเทนเนอร์ ดังนั้นสิ่งนี้จะสร้างสายโซ่ยาวขึ้นไปถึงคลาส "สุดยอด" ที่ไม่ได้ถูกฉีดเข้าไปที่ใดก็ได้ วิธีเดียวที่ฉันเห็นคือการทำให้Injectorบริบท / แอปพลิเคชันทั่วโลกพร้อมใช้งานผ่านซิงเกิลตันในขณะนั้นเพื่อให้คลาสอื่นสามารถรับถั่วที่ถูกจัดการได้ แต่มันขัดแย้งกับแนวคิดสำคัญที่ไม่เปิดเผยcomposition rootแอปพลิเคชัน อีกวิธีคือล่างขึ้นบน: เริ่มต้นด้วยคลาส "ระดับสูง" รวมไว้ในคอนเทนเนอร์ฉีดขึ้นต่อกันและค่อย ๆ เลื่อนลงไปที่คลาส "เล็ก" แต่ฉันต้องรอเป็นเวลานานเนื่องจากฉันสามารถทดสอบชั้นเรียนขนาดเล็กที่ยังคงขึ้นอยู่กับกลม / สถิตยศาสตร์ อะไรจะเป็นวิธีที่จะทำให้เกิดการย้ายถิ่นฐานอย่างค่อยเป็นค่อยไป? ป.ล. คำถามที่ค่อยเป็นค่อยไปวิธีการฉีดพึ่งพาจะคล้ายกันในชื่อ แต่ไม่ตอบคำถามของฉัน

3
วิธีจัดการกับ Classes ที่มีชื่อเดียวกัน (แพ็คเกจที่ต่างกัน)
ฉันและทีม R&D ของฉันรักษา codebase ขนาดใหญ่ เราได้แบ่งตรรกะทางธุรกิจของเราออกเป็นหลายแพ็คเกจ บางแห่งที่มีชั้นเรียนที่มีชื่อเหมือน ในขณะที่คุณสามารถเดาได้ว่าชื่อนั้นขัดแย้งกันเมื่อมีการอ้างอิงทั้งสองคลาสในไฟล์ Java เดียวกัน ตัวอย่างเช่น: com.myapp.model (package) - Device (class) - ... com.myapp.data (package) - Device (class) - ... เราได้ถกเถียงกันว่าอะไรคือวิธีปฏิบัติที่ดีที่สุดในการรักษากรณีเหล่านี้และตัวเลือกต่อไปนี้เกิดขึ้น: ตัวเลือกที่ 1 การเปลี่ยนชื่อชั้นเรียนโดยเพิ่มคำนำหน้า ModelDevice DataDevice ตัวเลือกที่ 2 ใช้ชื่อเต็ม package + class เมื่อทั้งคู่ถูกอ้างอิง com.myapp.model.Device com.myapp.data.Device มีอะไรที่ถูกต้องมากขึ้นในแง่ของการจัดการรหัสและความยืดหยุ่น? ขณะนี้เรากำลังผสมทั้งแนวทางและเริ่มมีความไม่สอดคล้องกัน

7
เหตุใดจึงไม่มีภาษาการเขียนโปรแกรมภาษาธรรมชาติหลายภาษามากกว่านี้
มีภาษาการเขียนโปรแกรมใดบ้างที่สามารถใช้ได้และขยายได้ในภาษาธรรมชาติมากกว่าหนึ่งภาษา? ตัวอย่างฉบับภาษาอังกฤษกับdo..whileวงรุ่นที่สเปนกับhacer..mientasวงรุ่นฝรั่งเศสด้วยและรุ่นดัตช์ด้วยfaire..pendantdoe..terwijl 'ภาษาการเขียนโปรแกรม' เพียงอย่างเดียวที่ฉันสามารถนึกถึงการดำเนินการเช่นนี้คือ Microsoft VBA คำถามโบนัส: ทำไมมีภาษาการเขียนโปรแกรมน้อยมากที่มีหลายภาษา?

2
`Vector <float> ควรจะสะท้อนกลับหรือควรเป็นไปตามความหมายของ IEEE 754?
เมื่อเปรียบเทียบค่าทศนิยมเพื่อความเท่าเทียมมีสองวิธีที่แตกต่างกัน: NaNจะไม่เท่ากับตัวเองซึ่งตรงกับมาตรฐาน IEEE 754สเปค NaNมีความเท่าเทียมกับตัวเองซึ่งให้คุณสมบัติทางคณิตศาสตร์ของReflexivityซึ่งเป็นสิ่งจำเป็นต่อความหมายของความสัมพันธ์ที่เท่าเทียมกัน สร้างขึ้นใน IEEE ลอยชนิดจุดใน C # ( floatและdouble) ปฏิบัติตามมาตรฐาน IEEE ความหมายสำหรับ==และ!=(และผู้ประกอบการเชิงสัมพันธ์เช่น&lt;) แต่ให้มั่นใจ reflexivity สำหรับobject.Equals, IEquatable&lt;T&gt;.Equals(และCompareTo) ตอนนี้พิจารณาห้องสมุดที่ให้ structs เวกเตอร์ที่ด้านบนของ/float doubleประเภทเวกเตอร์ดังกล่าวจะเกิน==/ !=และแทนที่/object.EqualsIEquatable&lt;T&gt;.Equals สิ่งที่ทุกคนเห็นพ้องต้องกันคือ==/ !=ควรทำตามความหมายของ IEEE คำถามคือห้องสมุดควรใช้Equalsวิธีการ (ซึ่งแยกจากตัวดำเนินการความเสมอภาค) ในวิธีที่สะท้อนกลับหรือในวิธีที่ตรงกับความหมายของ IEEE อาร์กิวเมนต์สำหรับการใช้ความหมายของ IEEE สำหรับEquals: เป็นไปตาม IEEE 754 มันเร็วกว่า (อาจมาก) เพราะสามารถใช้ประโยชน์จากคำสั่ง SIMD ได้ ฉันได้ถามคำถามแยกต่างหากเกี่ยวกับสแต็คโอเวอร์โฟลว์เกี่ยวกับวิธีที่คุณแสดงความเท่าเทียมสะท้อนกลับโดยใช้คำสั่ง SIMD และผลกระทบต่อประสิทธิภาพการทำงานของพวกเขา: คำแนะนำ SIMD สำหรับการเปรียบเทียบความเท่าเทียมกันของจุดลอยตัว อัปเดต:ดูเหมือนว่าเป็นไปได้ที่จะใช้ความเท่าเทียมแบบสะท้อนได้อย่างมีประสิทธิภาพโดยใช้คำสั่ง SIMD …

3
การปรับขนาดของตัวแปร“ จริง” มีประโยชน์อย่างไร?
สิ่งหนึ่งที่ทำให้ฉันรู้สึกว่าคุณสมบัติเชิงบวกของ C (จริง ๆ แล้วการใช้งานเช่น gcc, clang, ... ) คือความจริงที่ว่ามันไม่ได้เก็บข้อมูลที่ซ่อนอยู่ถัดจากตัวแปรของคุณที่รันไทม์ โดยสิ่งนี้ฉันหมายความว่าหากคุณต้องการตัวแปร "x" ของประเภท "uint16_t" คุณสามารถมั่นใจได้ว่า "x" จะใช้พื้นที่ 2 ไบต์เท่านั้น (และจะไม่นำข้อมูลที่ซ่อนอยู่เช่นประเภท ฯลฯ มาใช้) .) ในทำนองเดียวกันถ้าคุณต้องการอาเรย์ของจำนวนเต็ม 100 จำนวนเต็มคุณอาจมั่นใจได้ว่ามันมีขนาดใหญ่เท่ากับจำนวนเต็ม 100 ตัว แต่ยิ่งฉันพยายามที่จะเกิดขึ้นกับกรณีการใช้งานที่เป็นรูปธรรมสำหรับคุณลักษณะนี้มากขึ้นผมกำลังสงสัยว่าถ้าเป็นจริงมีใด ๆข้อได้เปรียบในทางปฏิบัติที่ทุกคน สิ่งเดียวที่ฉันสามารถขึ้นมาเพื่อให้ห่างไกลก็คือว่ามันเห็นได้ชัดว่าต้องการ RAM น้อย สำหรับสภาพแวดล้อมที่ จำกัด เช่นชิป AVR เป็นต้นนี่เป็นข้อดีอย่างมาก แต่สำหรับกรณีการใช้งานเดสก์ท็อป / เซิร์ฟเวอร์ทุกวันดูเหมือนว่าจะไม่เกี่ยวข้องเลย ความเป็นไปได้อีกอย่างหนึ่งที่ฉันคิดคืออาจเป็นประโยชน์ / สำคัญสำหรับการเข้าถึงฮาร์ดแวร์หรืออาจทำแผนที่ภูมิภาคของหน่วยความจำ (เช่นสำหรับเอาต์พุต VGA และอื่น ๆ ) ... …

2
การเขียนโปรแกรมไปยังอินเทอร์เฟซ Data Oriented
มีบางส่วนของ codebase ของเราเขียนในรูปแบบต่อไปนี้: // IScheduledTask.cs public interface IScheduledTask { string TaskName { get; set; } int TaskPriority { get; set; } List&lt;IScheduledTask&gt; Subtasks { get; set; } // ... several more properties in this vein } // ScheduledTaskImpl.cs public class ScheduledTaskImpl : IScheduledTask { public string TaskName { get; set; …

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