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

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

4
ปลั๊กอินควรใช้อะไร: hooks เหตุการณ์หรืออย่างอื่น?
พิจารณาแอพที่อนุญาตให้ปลั๊กอินตอบสนองต่อโฟลว์ของโปรแกรม ฉันรู้ 2 วิธีในการบรรลุเป้าหมายนี้: hooksและevents 1. ตะขอ ใช้การเรียกฟังก์ชั่นที่ว่างเปล่าภายในผังโปรแกรมหลัก ฟังก์ชั่นเหล่านี้สามารถแทนที่ได้ด้วยปลั๊กอิน ตัวอย่างเช่น Drupal CMS ใช้ฮุคที่พร้อมใช้งานกับโมดูลและธีม นี่คือตัวอย่างของวิธีการใช้เบ็ดในฟังก์ชั่นfile_copy function file_copy(stdClass $source, $destination = NULL, $replace = FILE_EXISTS_RENAME) { // ... [File copying routine] // Inform modules that the file has been copied. module_invoke_all('file_copy', $file, $source); return $file; // ... } โมดูลสามารถใช้modulename_file_copy($file, $source)ฟังก์ชั่นซึ่งจะถูกเรียกโดยในmodule_invoke_all file_copyหลังจากฟังก์ชั่นนี้เสร็จสิ้นการfile_copyดำเนินการจะดำเนินการต่อ 2. …

10
วิธีที่เหมาะสมในการจำลองกิจกรรมในโลกแห่งความเป็นจริงที่ดูเหมือนจะต้องการการอ้างอิงแบบวงกลมใน OOP
ฉันต่อสู้กับปัญหาในโครงการ Java เกี่ยวกับการอ้างอิงแบบวงกลม ฉันพยายามจำลองสถานการณ์ในโลกแห่งความเป็นจริงซึ่งดูเหมือนว่าวัตถุที่เป็นปัญหานั้นมีความเป็นอิสระและจำเป็นต้องรู้ซึ่งกันและกัน โครงการนี้เป็นรูปแบบทั่วไปของการเล่นเกมกระดาน คลาสพื้นฐานนั้นไม่ใช่แบบเฉพาะเจาะจง แต่ขยายออกไปเพื่อจัดการกับข้อมูลเฉพาะของหมากรุกแบ็คแกมมอนและเกมอื่น ๆ ฉันเขียนโค้ดนี้เป็นแอปเพล็ตเมื่อ 11 ปีที่แล้วกับเกมที่แตกต่างกันครึ่งโหล แต่ปัญหาคือมันเต็มไปด้วยการอ้างอิงแบบวงกลม ฉันนำมันกลับมาแล้วโดยการบรรจุคลาสที่เกี่ยวพันทั้งหมดไว้ในไฟล์ต้นฉบับเดียว แต่ฉันเข้าใจว่ามันเป็นรูปแบบที่ไม่ดีใน Java ตอนนี้ฉันต้องการใช้สิ่งที่คล้ายกันเป็นแอพ Android และฉันต้องการทำสิ่งที่ถูกต้อง ชั้นเรียนคือ: RuleBook: วัตถุที่สามารถสอบปากคำสำหรับสิ่งต่างๆเช่นเค้าโครงเริ่มต้นของคณะกรรมการข้อมูลเกมเริ่มต้นอื่น ๆ เช่นใครเป็นคนแรกที่ย้ายการเคลื่อนไหวที่มีอยู่สิ่งที่เกิดขึ้นกับรัฐเกมหลังจากการย้ายเสนอและการประเมินผลของ ตำแหน่งคณะกรรมการปัจจุบันหรือที่เสนอ บอร์ด: การแสดงบอร์ดเกมอย่างง่ายซึ่งสามารถสั่งให้สะท้อนการเคลื่อนไหวได้ MoveList: รายการ Moves นี่คือจุดประสงค์คู่: ตัวเลือกการเคลื่อนไหวที่มีให้ ณ จุดที่กำหนดหรือรายการการเคลื่อนไหวที่เกิดขึ้นในเกม มันอาจแบ่งออกเป็นสองคลาสใกล้เคียงกัน แต่นั่นไม่เกี่ยวข้องกับคำถามที่ฉันถามและอาจทำให้ซับซ้อนขึ้นอีก ย้าย: ย้ายเพียงครั้งเดียว มันรวมทุกอย่างเกี่ยวกับการเคลื่อนไหวเป็นรายการของอะตอม: หยิบชิ้นส่วนจากที่นี่วางไว้ที่นั่นเอาชิ้นส่วนที่ถูกจับออกจากที่นั่น สถานะ: ข้อมูลสถานะเต็มของเกมที่กำลังดำเนินการ ไม่เพียง แต่ตำแหน่ง Board เท่านั้น แต่เป็น MoveList และข้อมูลสถานะอื่น ๆ เช่นใครจะย้ายได้ …

3
สามเณรถึง node.js อะไรคือข้อดีที่ได้รับจากการใช้ callback ในการทำกิจกรรม?
ฉันเป็น JavaScripter สามเณรและไม่มีความรู้ที่แท้จริงว่าเกิดอะไรขึ้นกับเครื่องยนต์ V8 ต้องบอกว่าฉันสนุกกับการจู่โจมยุคแรกของฉันในสภาพแวดล้อมของ node.js แต่ฉันพบว่าฉันกำลังใช้ events.EventEmitter () เป็นวิธีในการเปล่งเหตุการณ์ทั่วโลกเพื่อให้ฉันสามารถจัดโครงสร้างโปรแกรมของฉันให้พอดีกับผู้สังเกตการณ์ รูปแบบคล้ายกับสิ่งที่ฉันจะเขียนด้วยพูดในโปรแกรม Objective-C หรือ Python ฉันพบว่าตัวเองทำสิ่งนี้อยู่เสมอ: var events = require('events'); var eventCenter = new events.EventEmitter(); eventCenter.on('init', function() { var greeting = 'Hello World!'; console.log('We're in the init function!); eventCenter.emit('secondFunction', greeting); }); eventCenter.on('secondFunction', function(greeting) { console.log('We're in the second function!); console.log(greeting); eventCenter.emit('nextFunction'); …

3
Python - 'if foo in dict' ลอง 'ลอง: dict [foo]'
นี่เป็นคำถามที่น้อยกว่าเกี่ยวกับธรรมชาติของการพิมพ์เป็ด ก่อนอื่น - เมื่อต้องรับมือกับ dicts โดยเฉพาะอย่างยิ่งเมื่อโครงสร้างของ dict นั้นสามารถคาดเดาได้อย่างเป็นธรรมและโดยทั่วไปแล้วคีย์ที่ได้รับจะไม่ปรากฏ แต่บางครั้งก็เป็นฉันแรกที่คิดว่าสองวิธี: if myKey in dict: do_some_work(dict[myKey]) else: pass และแน่นอนว่าแนวทางการให้อภัยกับการอนุญาตของ Ye Olde try: do_some_work(dict[myKey]) except KeyError: pass ในฐานะที่เป็นคนที่แต่งตัวประหลาดงูหลามชำนาญฉันรู้สึกเหมือนฉันเห็นหลังที่ต้องการเป็นจำนวนมากซึ่งจะให้ความรู้สึกที่ผมคิดว่าแปลกเพราะในเอกสารหลามtry/exceptsดูเหมือนจะเป็นที่ต้องการเมื่อมีข้อผิดพลาดที่เกิดขึ้นจริงเมื่อเทียบกับเอ่อ ... ตัวตนของความสำเร็จ? หาก dict เป็นครั้งคราวไม่มีคีย์ใน myDict และเป็นที่ทราบกันว่ามันจะไม่มีคีย์นั้นอยู่เสมอลอง / ยกเว้นในกรณีที่ทำให้เข้าใจผิดบริบทหรือไม่ นี่ไม่ใช่ข้อผิดพลาดในการเขียนโปรแกรมมันเป็นเพียงข้อมูลจริง - dict นี้ไม่มีรหัสเฉพาะนั้น สิ่งนี้ดูเหมือนว่าสำคัญเป็นอย่างยิ่งเมื่อคุณดูที่ลอง / ยกเว้น / ไวยากรณ์อื่นซึ่งดูเหมือนจะมีประโยชน์จริง ๆ เมื่อตรวจสอบให้แน่ใจว่าการลองไม่จับข้อผิดพลาดมากเกินไป คุณสามารถทำสิ่งที่ชอบ: try: foo += bar …
24 python 

2
ฉันควรสร้างรหัสสถานะ HTTP ของตัวเองหรือไม่ (a Twitter Twitter 420: Enhance Calm Your)
คำถามนี้ถูกโยกย้ายจาก Server Fault เนื่องจากสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 6 ปีที่แล้ว ฉันกำลังใช้ HTTP API เป็นครั้งแรก ฉันใช้เวลาไปกับการดูหน้า Wikipedia สำหรับรหัสสถานะ HTTP เพราะฉันมุ่งมั่นที่จะใช้รหัสที่ถูกต้องสำหรับสถานการณ์ที่เหมาะสม รายชื่อในหน้านั้นเป็นรหัสที่มีหมายเลข 420 ซึ่งเป็นรหัสที่กำหนดเองซึ่ง Twitter ใช้เพื่อ จำกัด อัตรา มีรหัสสำหรับการ จำกัด อัตราอยู่แล้ว มันคือ 429 สิ่งนี้ทำให้ฉันสงสัยว่าทำไมพวกเขาถึงกำหนดเองเมื่อมีกรณีใช้งานอยู่แล้ว นั่นน่ารักใช่มั้ย และหากเป็นเช่นนั้นสถานการณ์ใดบ้างที่จะทำให้ยอมรับรหัสสถานะที่แตกต่างออกไปและสิ่งใดหากลูกค้ามีปัญหาใด ๆ ฉันอ่านที่ไหนสักแห่งที่ Mozilla ไม่ได้ใช้การ418: I’m a teapotตอบสนองตลกซึ่งทำให้ฉันคิดว่าลูกค้าเลือกรหัสสถานะที่พวกเขาใช้ ถ้านั่นเป็นเรื่องจริงฉันก็นึกภาพเล็ก ๆ น้อย ๆ ของ Twitter ที่ทำให้รหัสสงบของคุณเป็นปัญหา นอกจากว่าฉันเข้าใจผิดและเราสามารถใส่หมายเลขรหัสใดก็ได้เพื่อหมายถึงสิ่งที่เราชอบและมีเพียงการประชุมที่บอกว่าไม่พบ …
24 api-design  http 

6
การหาปริมาณข้อดีของระบบควบคุมรุ่นใหม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันทำงานเป็นหัวหน้าทีม / นักพัฒนาในสภาพแวดล้อมขององค์กรทางการเงินขนาดใหญ่สำหรับส่วนที่ดีขึ้นของสามปี กระบวนการผลิตของเราเป็นฝันร้ายเพราะมันหมุนรอบ Clearcase เรามีกลุ่มการจัดการการเปลี่ยนแปลงที่ดำเนินการเผยแพร่ทั้งหมดและผู้ที่จะอนุญาตให้ใช้รหัสในการผลิตที่นำมาจากมันเท่านั้น หนึ่งในสิ่งแรกที่ฉันทำเมื่อเข้าร่วมคือการตั้งทีมของฉันกับ Git ทุกคนเห็นพ้องต้องกันว่า Clearcase นั้นแย่มากและไม่สามารถจัดการเรื่องการควบคุมแหล่งข้อมูลได้ทุกวัน ดังนั้นเราจึงตั้งค่าพื้นที่เก็บข้อมูลแบบ "ไม่เป็นทางการ" บนเครื่องท้องถิ่นของฉันและฉันเขียนสคริปต์เพื่อซิงค์ repos คอมไพล์และเคลียร์เคสของเราในช่วงเวลาที่วางจำหน่าย คำพูดนี้แพร่กระจายไปยังทีมอื่น ๆ และหลายคนได้นำกระบวนการเดียวกันมาใช้ การใช้คอมไพล์ในลักษณะ "ไม่เป็นทางการ" สำหรับกิจกรรมประจำวันและ "เป็นทางการ" โดยใช้ Clearcase สำหรับการเผยแพร่ ฉันกลายเป็นคนที่แต่งตัวประหลาดไปแล้วสำหรับปัญหาใด ๆ กับ Git ดังนั้นฉันจึงมีการประชุมสัปดาห์นี้กับ SVP ในการเปลี่ยนแปลงโครงสร้างพื้นฐานที่ต้องการให้ฉันอธิบายถึงข้อดีของ Git ให้เธอฟัง เห็นได้ชัดว่า Word เข้ามาหาเธอบ่อยครั้งใน Clearcase ของฉัน หากเธอยอมรับข้อโต้แย้งของฉันฉันจะได้รับการช่วยเหลือที่นายจ้างของฉันกำจัดตัวเองจากสิ่งที่น่ารังเกียจนี้ ประสบการณ์ของฉันกับผู้บริหารบอกพวกเขาว่าก) ต้องการคำอธิบายสั้น …

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

2
เรามีแอปพลิเคชั่น Ruby on Rails ขนาดใหญ่ (ผู้ใช้ 25 ล้านคนต่อเดือน) ผู้บริหารของเราตัดสินใจเขียนใหม่ใน Node.js ฉันบ้าไหม
กรุณาบอกฉันว่า: Node.js จะทำให้เว็บไซต์ของเราเร็วขึ้น! Node.js จะใช้ทรัพยากรเซิร์ฟเวอร์น้อยลงเราสามารถประหยัดเงินได้! Node.js จะทำให้เรามีประสิทธิผลมากขึ้น! Node.js หมายความว่าเราสามารถแบ่งปันรหัส JavaScript ฝั่งไคลเอ็นต์และเซิร์ฟเวอร์ เพื่อชี้แจงเรากำลังเขียนเซิร์ฟเวอร์ส่วนหน้าซึ่งจะพูดคุยกับแอพพลิเคชั่น Ruby on Rails ที่เรามีอยู่ในฐานะ API ในขณะเดียวกันเราจะปรับปรุงแอพพลิเคชัน Ruby on Rails ของเราให้เป็นบริการ รายละเอียดเพิ่มเติมเกี่ยวกับสถาปัตยกรรมที่มีอยู่: Memcachedสำหรับการแคช partials HTML redisสำหรับเซสชั่นและบางแคชข้อมูลที่มีโครงสร้าง MySQLหลักเดียวหลายทาส มีโต๊ะขนาดใหญ่ที่ยอมรับการเขียนได้มากมาย (ลองนึกภาพโพล) มิฉะนั้นส่วนใหญ่อ่าน MongoDBสำหรับข้อมูลเมตาบางส่วน Ruby on Rails 3.0 nginxและยูนิคอร์น

5
อาร์กิวเมนต์หลายตัวในการเรียกใช้ฟังก์ชันเทียบกับอาร์เรย์เดียว
ฉันมีฟังก์ชั่นที่ใช้ในชุดของพารามิเตอร์จากนั้นนำไปใช้กับพวกเขาเป็นเงื่อนไขในแบบสอบถาม SQL อย่างไรก็ตามในขณะที่ฉันชอบอาร์เรย์อาร์กิวเมนต์เดียวที่มีเงื่อนไขตัวเอง: function searchQuery($params = array()) { foreach($params as $param => $value) { switch ($param) { case 'name': $query->where('name', $value); break; case 'phone': $query->join('phone'); $query->where('phone', $value); break; } } } เพื่อนร่วมงานของฉันต้องการแสดงรายการอาร์กิวเมนต์ทั้งหมดแทนอย่างชัดเจน: function searchQuery($name = '', $phone = '') { if ($name) { $query->where('name', $value); } if ($phone) { $query->join('phone'); …

5
เว็บเซิร์ฟเวอร์บังคับใช้นโยบายกำเนิดเดียวกันได้อย่างไร
ฉันดำน้ำลึกลงไปในการพัฒนา RESTful API และทำงานร่วมกับกรอบที่แตกต่างกันสองสามอย่างเพื่อบรรลุเป้าหมายนี้ แน่นอนว่าฉันใช้นโยบายที่มาจากเดิมและตอนนี้ฉันสงสัยว่าเว็บเซิร์ฟเวอร์ (แทนที่จะเป็นเว็บเบราว์เซอร์) บังคับใช้อย่างไร จากสิ่งที่ฉันเข้าใจการบังคับใช้บางอย่างดูเหมือนจะเกิดขึ้นที่ส่วนท้ายของเบราว์เซอร์ (เช่นการเคารพส่วนหัว Access-Control-Allow-Origin - ที่ได้รับจากเซิร์ฟเวอร์) แต่แล้วเซิร์ฟเวอร์ล่ะ ตัวอย่างเช่นสมมติว่าเว็บเซิร์ฟเวอร์โฮสต์ Javascript เว็บแอปที่เข้าถึง API และโฮสต์บนเซิร์ฟเวอร์นั้น ฉันคิดว่าเซิร์ฟเวอร์จะบังคับใช้นโยบายกำเนิดเดียวกัน --- เพื่อให้เฉพาะจาวาสคริปต์ที่โฮสต์บนเซิร์ฟเวอร์นั้นจะได้รับอนุญาตให้เข้าถึง API นี่จะป้องกันไม่ให้คนอื่นเขียนไคลเอนต์จาวาสคริปต์สำหรับ API นั้นและโฮสต์ไว้ในไซต์อื่นใช่ไหม ดังนั้นเว็บเซิร์ฟเวอร์จะสามารถหยุดไคลเอ็นต์ที่เป็นอันตรายที่พยายามส่งคำขอ AJAX ไปยังจุดสิ้นสุด API ของตนในขณะที่อ้างว่าใช้จาวาสคริปต์ที่มาจากเว็บเซิร์ฟเวอร์เดียวกันได้อย่างไร เซิร์ฟเวอร์ยอดนิยม (Apache, nginx) ป้องกันการโจมตีแบบนี้ได้อย่างไร? หรือความเข้าใจของฉันในเรื่องนี้อย่างใดปิดเครื่องหมาย? หรือมีการบังคับใช้นโยบายข้ามแหล่งที่มาเฉพาะที่ส่วนท้ายของไคลเอ็นต์หรือไม่

6
ทำไมทีมที่ LMAX ใช้จาวาและออกแบบสถาปัตยกรรมเพื่อหลีกเลี่ยง GC ในทุกกรณี?
ทำไมทีมที่ LMAX จึงออกแบบLMAX Disruptorใน Java แต่ทุกจุดของการออกแบบเพื่อลดการใช้งาน GC หากไม่มีใครต้องการให้ GC ทำงานแล้วทำไมต้องใช้ภาษาที่รวบรวมขยะ? การเพิ่มประสิทธิภาพระดับความรู้ด้านฮาร์ดแวร์และความคิดของพวกเขานั้นยอดเยี่ยม แต่ทำไม Java ฉันไม่ได้ต่อต้าน Java หรืออะไร แต่ทำไมเป็นภาษา GC ทำไมไม่ใช้สิ่งที่ต้องการ D หรือภาษาอื่นที่ไม่มี GC แต่ให้โค้ดที่มีประสิทธิภาพ? เป็นทีมที่คุ้นเคยกับ Java มากที่สุดหรือ Java นั้นมีข้อได้เปรียบที่ไม่เหมือนใครหรือไม่? สมมติว่าพวกเขาพัฒนาโดยใช้ D พร้อมการจัดการหน่วยความจำด้วยตนเองสิ่งที่แตกต่างกันคืออะไร พวกเขาจะต้องคิดในระดับต่ำ (ซึ่งพวกเขาเป็นอยู่แล้ว) แต่พวกเขาสามารถบีบประสิทธิภาพที่ดีที่สุดออกมาจากระบบเหมือนเป็นเจ้าของภาษา

6
ทำไมจึงไม่ใช้จาวาเป็นภาษาสำหรับสร้าง?
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ หาก Java เป็นภาษาที่ใช้โดยทั่วไปและการสร้างโปรแกรมเป็นสิ่งที่สามารถอธิบายได้โดยใช้ภาษา Java ทำไมจึงไม่ใช่วิธีที่ดีที่สุดในการเขียนไฟล์บิลด์และเราใช้เครื่องมือเช่น Ant, Maven และ Gradle แทน มันจะไม่ตรงไปตรงมามากกว่านี้และยังไม่จำเป็นต้องเรียนรู้ภาษาการเขียนโปรแกรมอีกด้วย (BTW - คำถามนี้สามารถใช้ได้กับภาษาอื่นเช่น C #)
24 java  c#  builds  build-system 

3
โรงงานคงเทียบกับโรงงานเป็นซิงเกิล
ในบางรหัสของฉันฉันมีโรงงานแบบคงที่เช่นนี้: public class SomeFactory { // Static class private SomeFactory() {...} public static Foo createFoo() {...} public static Foo createFooerFoo() {...} } ในระหว่างการตรวจสอบรหัสมันก็เสนอว่าควรจะเป็นซิงเกิลตันและฉีด ดังนั้นควรมีลักษณะดังนี้: public class SomeFactory { public SomeFactory() {} public Foo createFoo() {...} public Foo createFooerFoo() {...} } บางสิ่งที่ควรเน้น: โรงงานทั้งสองไร้สัญชาติ ข้อแตกต่างระหว่างเมธอดคือขอบเขต (อินสแตนซ์ vs คงที่) การใช้งานเหมือนกัน Foo เป็นถั่วที่ไม่มีส่วนต่อประสาน ข้อโต้แย้งที่ฉันได้รับจากการคงที่คือ: …

3
เป็นวิธีที่มีประสิทธิภาพในการค้นหาทศนิยมซ้ำอะไร
ฉันกำลังพยายามที่จะหาขั้นตอนวิธีการที่มีประสิทธิภาพใน Java เพื่อหาสิ่งที่เป็นส่วนหนึ่งของการทำซ้ำทศนิยมสองจำนวนเต็มaและที่ba/b เช่น. 5/7 = 0.714258 714258 .... ขณะนี้ฉันรู้วิธีการแบ่งแบบยาวเท่านั้น
24 algorithms  math 

5
ภาษาที่ใช้ในการเขียนโปรแกรม“ ให้” ปรากฏขึ้นเป็นครั้งแรก?
ฉันสงสัยเกี่ยวกับต้นกำเนิดของ "การปล่อย" ที่ใช้ใน Lisp, Clojure และ Haskell มีใครรู้บ้างว่าภาษานั้นปรากฏในภาษาใดเป็นอันดับแรก

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