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

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

3
จะทำการดัดแปลงซอฟต์แวร์ให้เป็นแบบเรียลไทม์ได้อย่างไร? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา สำหรับตอนแรกฉันอยากจะพูดถึงว่าฉันเป็นมือใหม่ในการเขียนโปรแกรมระบบเรียลไทม์นั่นเป็นเหตุผลที่ฉันไม่แน่ใจว่าคำถามของฉันถูกต้องหรือไม่ ขออภัยสำหรับสิ่งนั้น แต่ฉันต้องการความช่วยเหลือ คำถามโดยย่อ: วิธีใช้งานซอฟต์แวร์แบบเรียลไทม์อย่างหนักเพื่อให้แน่ใจว่าตรงตามกำหนดเวลาที่ยากหรือไม่ จำเป็นต้องใช้คุณสมบัติ QNX ใช่ไหม หรือมันเพียงพอที่จะเขียนสำหรับ linux, พอร์ตไปยัง QNX และมันจะเป็นเรียลไทม์โดยค่าเริ่มต้น คำถามเต็ม: เราได้นำซอฟต์แวร์มัลติโพรเซสเซอร์ข้ามแพลตฟอร์มที่ซับซ้อนมาพร้อมกับการสื่อสารระหว่างกระบวนการสำหรับ Linux, Windows, Android และ QNX ภาษาการเขียนโปรแกรมคือ C ++ เราใช้ Boost และ planty ของ libs อื่น ๆ ซอฟต์แวร์ของเราทำงานได้ดีและรวดเร็ว แต่ก็ยังเป็นเครื่องต้นแบบอยู่ เพื่อจุดประสงค์ในการผลิตเราต้องดำเนินการตามเวลาจริงคุณสมบัติบางอย่างของเราต้องเป็นแบบเรียลไทม์และแข็งแกร่งมากเพราะมันมีความสำคัญและความปลอดภัยของคนที่ใช้ซอฟต์แวร์ของเราอาจขึ้นอยู่กับคุณสมบัติเหล่านั้น พวกมันทำงานได้อย่างรวดเร็ว - มากถึงหลายร้อยมิลลิวินาที แต่ฉันไม่แน่ใจว่าระบบของเราเป็นแบบเรียลไทม์เนื่องจากความจริงข้อนี้ (ฉันพูดถูก) ดังนั้นจึงมีคำถามหลัก: วิธีการปรับเปลี่ยนซอฟต์แวร์ของเราเป็นเรียลไทม์? ฉัน googled …
9 c++  real-time 

3
จะเก็บข้อมูล _structured_ จำนวนมากได้อย่างไร
แอปพลิเคชั่นจะรวบรวมตำแหน่งของผู้ใช้อย่างต่อเนื่อง (ประมาณทุกวินาที) และเก็บไว้ ข้อมูลนี้มีโครงสร้าง ในฐานข้อมูลเชิงสัมพันธ์มันจะถูกเก็บไว้เป็น: | user | timestamp | latitude | longitude | อย่างไรก็ตามมีข้อมูลมากเกินไป จะมี 60 × 60 × 24 = 86,400 บันทึกต่อผู้ใช้ทุกวัน แม้จะมีผู้ใช้ 1,000 ราย แต่ก็หมายถึงบันทึก 86,400,000 ต่อวัน และไม่เพียงบันทึก 86,400,000 ต่อวัน เนื่องจากบันทึกเหล่านี้จะถูกประมวลผลและเวอร์ชันที่ประมวลผลจะถูกเก็บไว้เช่นกัน ดังนั้นจงคูณจำนวนนั้นด้วยประมาณ 2 ฉันวางแผนจะใช้ข้อมูลอย่างไร โดยพื้นฐานแล้วฉันวางแผนที่จะสร้างข้อมูลตำแหน่งที่หยาบขึ้นเพื่อให้ง่ายต่อการใช้งาน นั่นคือ: เรียงลำดับข้อมูล wrt timestamps ที่ได้รับ ทำรายการนี้ตามลำดับพิจารณาว่าสถานที่มีการเปลี่ยนแปลงอย่างมีนัยสำคัญ (โดยการตรวจสอบว่าละติจูดและลองจิจูดเปลี่ยนไปมากน้อยเพียงใด) แสดงถึงการเปลี่ยนแปลงตำแหน่งที่ไม่สำคัญเป็นรายการเดียวในเอาต์พุต (ดังนั้นเอาต์พุตคือเวอร์ชันที่หยาบกว่าของข้อมูลตำแหน่ง) ทำซ้ำขั้นตอนนี้กับผลลัพธ์โดยกำหนดให้มีการเปลี่ยนแปลงละติจูดและลองจิจูดที่ยิ่งใหญ่ขึ้นเพื่อการเปลี่ยนแปลงที่สำคัญ ดังนั้นผลผลิตที่จะผลิตจากผลผลิตก่อนหน้านี้จะยิ่งทำให้หยาบยิ่งขึ้น ทำซ้ำขั้นตอนทั้งหมดเท่าที่จำเป็น …

2
วิธีการห่อหุ้มคลาสภายในใน API ที่เขียนด้วย Java?
เราต้องเขียนห้องสมุด โดยปกติมันควรมี API ที่เล็กมาก (กว้างที่สุดเท่าที่จำเป็นเล็กที่สุดเท่าที่จะทำได้) internals ของห้องสมุดค่อนข้างซับซ้อน ดังนั้นพวกเขาต้องการโครงสร้าง สำหรับโครงสร้างฉันเห็นสองวิธี: 1. ใช้แพ็คเกจ ข้อดี:ห้องสมุดสามารถจัดโครงสร้างอย่างเรียบร้อย ทุกอย่างในที่ของมัน ข้อเสีย:การใช้คลาสผ่านขอบแพคเกจจำเป็นต้องใช้คลาสสาธารณะจึงขยาย API ของไลบรารีทั้งหมด 2. ใช้คลาสภายในแบบคงที่ทั้งหมดในแพ็คเกจเดียว ข้อดี: ต้องการเพียงสิ่งสาธารณะน้อยมาก (คลาส, วิธีการและอื่น ๆ ) ที่จำเป็น ข้อด้อย:ชั้นเรียนถูกซ่อนไว้เพียงเพื่อจัดโครงสร้างพวกเขา นี่จะเป็นกรณีการใช้งานเพียงไม่กี่กรณีที่มีคลาสภายในแบบสแตติกจำนวนมากใช้อยู่ นักพัฒนาไม่คุ้นเคยกับสิ่งนั้นและอาจมองข้ามพวกเขา มีวิธีที่ดีกว่าในการบรรลุ API ขนาดเล็กในห้องสมุดที่มีโครงสร้างหรือไม่? แก้ไข:ฉันลืมพูดถึง: มันเป็นห้องสมุด Android ดังนั้นจึงไม่มี java9

2
นี่เป็นวิธีที่ดีสำหรับลำดับชั้นของคลาส“ pImpl” ใน C ++ หรือไม่
ฉันมีลำดับชั้นเรียนที่ฉันต้องการแยกอินเทอร์เฟซจากการใช้งาน โซลูชันของฉันคือการมีสองลำดับชั้น: ลำดับชั้นของการจัดการสำหรับอินเทอร์เฟซและลำดับชั้นของคลาสที่ไม่เป็นสาธารณะสำหรับการนำไปใช้ คลาสตัวจัดการพื้นฐานมีตัวชี้การใช้งานซึ่งคลาสตัวจัดการที่ได้รับมาส่งไปยังตัวชี้ของชนิดที่ได้รับ (ดูฟังก์ชันgetPimpl()) นี่คือภาพร่างของโซลูชันของฉันสำหรับคลาสพื้นฐานที่มีสองคลาสที่ได้รับ มีวิธีแก้ปัญหาที่ดีกว่านี้ไหม? ไฟล์ "Base.h": #include <memory> class Base { protected: class Impl; std::shared_ptr<Impl> pImpl; Base(Impl* pImpl) : pImpl{pImpl} {}; ... }; class Derived_1 final : public Base { protected: class Impl; inline Derived_1* getPimpl() const noexcept { return reinterpret_cast<Impl*>(pImpl.get()); } public: Derived_1(...); void func_1(...) const; …
9 design  c++  c++11 

3
อายุของตรรกะโดเมนในฐานข้อมูลมากกว่าหรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ฉันเพิ่งสะดุดความคิดเห็นนี้จากปี 2559 โดยบอกว่ายังมีกรณีสำหรับตรรกะของโดเมนในฐานข้อมูล ฉันคิดว่ามันล้าสมัยไปหมดแล้ว ฉันแค่สงสัยว่าผู้ชายคนนั้นยังคงมีชีวิตอยู่ในช่วงอายุ 90 ปีหรือไม่ก็สามารถเป็นจริงได้ วางระบบเดิม สิ่งที่เกี่ยวกับการมีตรรกะโดเมนในฐานข้อมูลเพราะข้อกำหนดด้านความปลอดภัย นั่นเป็นสิ่งที่ต้องทำจริงๆเหรอ?
9 database 

3
วิธีสร้างแบบจำลองการเตรียมเนื้อเรื่องสำหรับปัญหาที่ถูกแก้ไขในหลายโครงการ
ใน บริษัท ของเราหลายทีมจะทำงานกับส่วนประกอบต่าง ๆ ของหลายโครงการในเวลาเดียวกัน ตัวอย่างเช่นทีมหนึ่งอาจสร้างซอฟต์แวร์เฉพาะประเภท (หรือฮาร์ดแวร์) สำหรับโครงการบางโครงการทีมอื่นซอฟต์แวร์ประเภทอื่นที่เฉพาะเจาะจง เราใช้โครงการจิราเพื่อโฮสต์ปัญหาสำหรับโครงการเฉพาะและบอร์ดจิราสำหรับการวิ่งสำหรับทีมที่แตกต่างกัน เราประสบปัญหาในการหลีกเลี่ยงการทำสำเนารหัสในโครงการต่างๆและได้พัฒนาชุดของไลบรารีหลักที่เราใช้ในโครงการเหล่านั้น ในขณะที่ทำงานในโครงการผู้พัฒนาบางคนจะรู้ว่าชิ้นส่วนของรหัสที่พวกเขาเขียนนั้นมีความน่าสนใจมากขึ้นและควรถูกแยกออกเป็นไลบรารีหลักหรือว่ารหัสหลักที่พวกเขาใช้มีข้อบกพร่องต้องการพารามิเตอร์เพิ่มเติมหรือ คุณสมบัติใหม่ ... คุณตั้งชื่อมัน ดังนั้นพวกเขาจึงสร้างปัญหาไลบรารีหลักที่เข้าสู่ Backlog ของโครงการหลัก ปัญหาทั้งหมดเหล่านี้จะได้รับการทบทวนจัดลำดับความสำคัญและประเมินในการประชุมห้องสมุดหลัก (สัปดาห์ละครั้ง) และจะได้รับการจัดการตามลำดับความสำคัญของพวกเขา (ควบคู่กับปัญหาเฉพาะโครงการ) ในการวิ่งในอนาคต การจัดลำดับความสำคัญทำได้โดยการเรียงลำดับปัญหาและเราวางsortedเลเบลในปัญหาที่เรียงลำดับแล้ว (เพื่อให้เราสามารถค้นหาสิ่งที่ไม่เรียงลำดับได้) จากนั้นเราวางปัญหาหนึ่งรายการต่อองค์ประกอบหลักด้วยตนเองที่ด้านบนสุดของ backlog เพื่อให้พวกเขาได้รับการจัดการก่อน เมื่อบางทีมนำปัญหาดังกล่าวไปสู่การวิ่งพวกเขาต้องลากรายการอื่นไปที่ด้านบนสุดของงานค้างแทน นี่เป็นข้อผิดพลาดค่อนข้างง่าย โดยทั่วไปสิ่งที่เรามีคือสถานะปัญหาเพิ่มเติม "เรียงลำดับ" และ "ประเมิน" ระหว่าง "เปิด" และ "อยู่ระหว่างดำเนินการ" การสะท้อนสิ่งนี้ผ่านsortedฉลากและตำแหน่งของพวกเขาในบอร์ดค่อนข้างยุ่งยากและเกิดข้อผิดพลาดได้ง่าย (ตัวอย่างเช่นหากมีใครบางคนย้ายปัญหาในการวิ่งขึ้นและลงสิ่งนี้จะสะท้อนให้เห็นในกระดานหลักเงียบ ๆ เพื่อตรวจสอบลำดับของปัญหาที่ทีมอาจได้ตัดสินใจในการอภิปรายในสัปดาห์ที่ผ่านมา) ดังนั้นจะเป็นวิธีที่ดีกว่าในการใช้สิ่งนี้

2
อะไรที่ทำให้ Iterator เป็นรูปแบบการออกแบบ?
ฉันสงสัยว่ามันคืออะไรที่ทำให้ Iterator เป็นพิเศษเมื่อเทียบกับสิ่งก่อสร้างที่คล้ายกันอื่น ๆ และทำให้Gang of Fourแสดงว่าเป็นรูปแบบการออกแบบ Iterator ขึ้นอยู่กับความแตกต่าง (ลำดับชั้นของคอลเลกชันที่มีอินเตอร์เฟซทั่วไป) และการแยกข้อกังวล (การวนซ้ำในการรวบรวมควรเป็นอิสระจากวิธีการจัดโครงสร้างข้อมูล) แต่จะเกิดอะไรขึ้นถ้าเราแทนที่ลำดับชั้นของคอลเลกชันด้วยเช่นลำดับชั้นของวัตถุทางคณิตศาสตร์ (จำนวนเต็ม, ลอย, ซับซ้อน, เมทริกซ์ ฯลฯ ) และตัววนซ้ำโดยคลาสที่แสดงถึงการดำเนินการบางอย่างที่เกี่ยวข้องกับวัตถุเหล่านี้ แผนภาพคลาสจะเหมือนกัน เราอาจพบตัวอย่างที่คล้ายกันอื่น ๆ อีกมากมายเช่น Writer, Painter, Encoder และคนที่ดีกว่าซึ่งทำงานในลักษณะเดียวกัน อย่างไรก็ตามฉันไม่เคยได้ยินชื่อเหล่านี้เรียกว่ารูปแบบการออกแบบ แล้วอะไรที่ทำให้ Iterator มีความพิเศษ? ความจริงที่ว่ามันซับซ้อนกว่าเพราะต้องมีสถานะที่ไม่แน่นอนในการจัดเก็บตำแหน่งปัจจุบันภายในคอลเลกชันหรือไม่? แต่แล้วรัฐที่ไม่แน่นอนมักจะไม่ได้รับการพิจารณาว่าเป็นที่น่าพอใจ เพื่อชี้แจงประเด็นของฉันให้ฉันยกตัวอย่างรายละเอียดเพิ่มเติม นี่คือปัญหาการออกแบบของเรา: สมมติว่าเรามีลำดับชั้นของชั้นเรียนและการดำเนินการที่กำหนดไว้ในวัตถุของชั้นเรียนเหล่านี้ อินเทอร์เฟซของการดำเนินการนี้จะเหมือนกันสำหรับแต่ละคลาส แต่การใช้งานอาจแตกต่างกันโดยสิ้นเชิง นอกจากนี้ยังสันนิษฐานว่ามันสมเหตุสมผลที่จะใช้การดำเนินการหลายครั้งบนวัตถุเดียวกันพูดด้วยพารามิเตอร์ที่แตกต่างกัน นี่คือทางออกที่สมเหตุสมผลสำหรับปัญหาการออกแบบของเรา (ในทางปฏิบัติทั่วไปของรูปแบบตัววนซ้ำ): สำหรับการแยกความกังวลการใช้งานของการดำเนินการไม่ควรเพิ่มเป็นฟังก์ชั่นไปยังลำดับชั้นของระดับเดิม (วัตถุตัวถูกดำเนินการ) เนื่องจากเราต้องการที่จะใช้การดำเนินการหลายครั้งในตัวถูกดำเนินการเดียวกันมันควรจะเป็นตัวแทนของวัตถุที่มีการอ้างอิงถึงตัวถูกดำเนินการไม่เพียงแค่ฟังก์ชั่น ดังนั้นวัตถุตัวถูกดำเนินการควรให้ฟังก์ชั่นที่ส่งกลับวัตถุที่เป็นตัวแทนของการดำเนินการ วัตถุนี้มีฟังก์ชั่นที่ดำเนินการตามจริง ตัวอย่าง: มีชั้นฐานหรืออินเตอร์เฟซที่เป็นMathObject(ชื่อโง่ฉันรู้ว่าอาจจะมีคนที่มีความคิดที่ดี.) กับการเรียนมาและMyInteger …

1
เซิร์ฟเวอร์ข้อมูลประจำตัวเสนออะไรที่ ASP.NET Core Identity ไม่
ฉันพยายามที่จะทำให้หัวของฉันเป็นภาพใหญ่เมื่อสร้างเว็บไซต์ใหม่โดยใช้ ASP.NET Core ฉันต้องการให้ผู้ใช้เว็บไซต์ของฉันสามารถลงทะเบียนและเข้าสู่ระบบด้วยโซเชียลมีเดียเช่น Facebook และ Google เมื่อลงทะเบียนเมื่อพวกเขาทำการร้องขอไปยัง WebAPI ของฉันสำหรับทรัพยากรฉันจำเป็นต้องรู้ว่าผู้ใช้คนใดที่เข้าสู่ระบบเพื่อให้คำขอทรัพยากรสามารถทำให้เป็นส่วนตัวกับผู้ใช้ ฉันเคยเล่นกับ ASP.NET Core Identity และดูเหมือนว่าจะมีฟังก์ชั่นมากมายของสิ่งที่ฉันต้องการ - ตัวอย่างเช่นการลงทะเบียนกับผู้ให้บริการภายนอกการเข้าสู่ระบบและการจัดเก็บรายละเอียดเหล่านั้นในฐานข้อมูลโดยใช้ Entity Framework วิเศษกว่าที่ฉันต้องการจริงๆ - ขั้นตอนการสอนหลายรายการเพื่อให้มันทำงานได้โดยไม่ต้องอธิบายว่ามันทำงานอย่างไรในพื้นหลังเพื่อพูดคุยกับ Facebook เป็นต้น ในส่วนหน้าฉันต้องการใช้ Aurelia และฉันสังเกตเห็นบทเรียนจำนวนหนึ่งซึ่งใช้ Identity Server ซึ่งฉันเข้าใจว่าเป็นการใช้งานของ OpenIDConnect ต้องผ่านวิดีโอเกี่ยวกับ IdentityServer ... ฉันเข้าใจว่าคุณสามารถใช้ ASP.NET Core Identity กับ IdentityServer สิ่งที่ฉันไม่ได้รับคือว่าเป็นสิ่งที่มีประโยชน์สำหรับฉันเพียงแค่ใช้ ASP.NET Core Identity (ที่กล่าวว่าฉันดูเหมือนจะไม่สามารถหาบทเรียนสำหรับการบูรณาการ Aurelia, ASP.NET Core Identity ... …
9 asp.net  oauth2 

2
รูปแบบองค์กรสำหรับการรับรองความถูกต้อง JWT สำหรับแอปพลิเคชันที่ใช้ REST หรือไม่
ข้อมูลจำเพาะ JWT อธิบายถึงน้ำหนักบรรทุกและวิธีการส่ง แต่ปล่อยให้โปรโตคอลการตรวจสอบความถูกต้องเปิดซึ่งช่วยให้มีความยืดหยุ่น แต่น่าเสียดายที่ความยืดหยุ่นสามารถนำไปสู่การออกแบบและออกแบบที่ผิด ฉันกำลังมองหาแนวคิดที่ดีและผ่านการทดสอบการใช้งานองค์กรสำหรับการรับรองความถูกต้อง JWT ซึ่งฉันสามารถใช้หรือปรับเปลี่ยนได้ แต่ฉันล้มเหลวในการค้นหาสิ่งที่สมบูรณ์ สิ่งที่ฉันคิดคือ เมื่อไม่พบส่วนหัวการให้สิทธิ์หรือโทเค็น JWT ไม่ถูกต้องหรือหมดอายุให้ส่ง HTTP 401 เพื่อตรวจสอบสิทธิ์ใช้ / ล็อกอินช่อง REST ส่งชื่อผู้ใช้และรหัสผ่านเป็นวัตถุ JSON เพื่อให้โทเค็นยังมีชีวิตอยู่ใช้ / keepalive REST ช่องเรียกมันทุก ๆ N (5) นาทีรับโทเค็น JWT ใหม่และแทนที่หนึ่งที่มีอยู่หลังจากแต่ละสาย (โทเค็นหมดอายุหลังจาก M (15) นาที) อย่างไรก็ตามสิ่งที่รบกวนฉันคือความจำเป็นของช่องทางนั้น / keepalive ในทางกลับกันมันบังคับให้ฉันเพื่อป้องกันไม่ให้การรับรองความถูกต้องหมดอายุแม้ว่าผู้ใช้จะไม่อยู่ (การตัดสินใจถ้าเรายังต้องการ keepalive ยังไม่พบ) และแน่นอนการโทรเหล่านั้นเป็นพิเศษและมีความซับซ้อนเป็นพิเศษในโปรโตคอล สิ่งที่น่าสนใจก็คือเซิร์ฟเวอร์นั้นจะขยายโทเค็นโดยอัตโนมัติ ในสภาพแวดล้อมแบบเซสชันนั้นเกิดขึ้นโดยการรีเซ็ตเวลาประทับที่นี่อย่างไรก็ตามเซิร์ฟเวอร์จะต้องส่งโทเค็นใหม่อาจไม่ได้แต่ละครั้ง แต่เมื่อโทเค็นจะหมดอายุใน R (พูด 10 …

2
Microservices & Canonical model
เมื่อฉันอ่านเกี่ยวกับไมโครไซต์บนเว็บไซต์นี้ฉันเจอคำแถลงด้านล่าง สกีมาแบบบัญญัติมีความหมายอย่างไร มันไม่เหมือนกับโมเดลโดเมนใช่ไหม รูปแบบสถาปัตยกรรม Microservices ปฏิเสธส่วนอื่น ๆ ของ SOA เช่นแนวคิดของ schema แบบบัญญัติ

1
การรักษาประวัติ git ที่สะอาดเมื่อใช้ gitflow - unmerged มุ่งมั่นพัฒนา
การใช้ gitflow เมื่อสร้างrelease-1.0.0สาขาและรวมเข้ากับทั้งสองmasterและdevelopทั้งสองสาขาจะมีความมุ่งมั่นที่ขาดหายไป: masterเคยมีความมุ่งมั่นที่release-1.0.0จะผสานกับdevelop developเคยมีความมุ่งมั่นที่release-1.0.0จะผสานกับmaster แต่หลังจากที่hotfix-1.0.1ถูกสร้างขึ้นและรวมกับmasterเมื่อมันถูกรวมกับdevelopการมุ่งมั่นที่จะผสานจะรวมถึงการกระทำก่อนหน้านี้ที่release-1.0.0ได้รับการรวมmaster; ดังนั้นมันจะเป็นดังนี้: User 'john doe' is trying to merge the following commits into 'develop' from 'hotfix-1.1.1'. * merge release-1.0.0 to master * merge release-1.1.0 to master * Fix shopping cart critical bug หากเสียงนี้ทำให้เกิดความสับสนคุณสามารถสังเกตเห็น everytie นี้คุณเห็นdevelopมักจะเป็นคู่ของกระทำหลังmaster(แม้ว่าการพัฒนาในทางทฤษฎีควรเท่านั้นจะไปข้างหน้าเนื่องจากเป็นสาขาหลัก. กระทำเหล่านี้จะผสานจากrelease-x.x.xไปmaster) สิ่งนี้ควรจัดการเพื่อรักษาประวัติที่สะอาดหรือไม่?
9 git  gitflow 

3
มันตกลงหรือไม่สำหรับอินเตอร์เฟสที่ต้องพึ่งพาคลาสที่เป็นรูปธรรม?
ฉันกำลังสร้างส่วนติดต่อใน Java สำหรับตัวจัดการข้อผิดพลาดที่กำหนดเอง ต้องการส่งผ่านข้อผิดพลาดวัตถุข้อโต้แย้ง แต่ฉันต้องการมันเป็นลูกของExceptionชั้น จะใช้ชื่อคลาสที่กำหนดในอินเทอร์เฟซได้หรือไม่ มันจะทำให้อินเทอร์เฟซน้อยลงหรือไม่ขึ้นอยู่กับการใช้งานใด ๆ ฉันพยายามทำสิ่งนี้: public class CustomException { /* ... Implementation ... */ } public interface Interface { void onError(CustomException ex); }

3
บางครั้งฟังก์ชั่นส่วนตัวเป็นเพียงฟังก์ชันหน่วยภายในที่ยังไม่ถูกแยกออกมา ดังนั้นทำไมไม่ทดสอบพวกเขา
บางครั้งฟังก์ชั่นส่วนตัวของโมดูลหรือคลาสนั้นเป็นฟังก์ชั่นภายในที่ยังไม่ถูกแยกออกมาซึ่งอาจสมควรได้รับการทดสอบของตัวเอง ดังนั้นทำไมไม่ทดสอบพวกเขา เราจะเขียนการทดสอบสำหรับพวกเขาในภายหลังหาก / เมื่อพวกเขากำลังสกัด เหตุใดจึงไม่เขียนการทดสอบตอนนี้เมื่อพวกเขายังคงเป็นส่วนหนึ่งของไฟล์เดียวกัน เพื่อสาธิต: module_aครั้งแรกที่ผมเขียน ตอนนี้ฉันต้องการเขียนแบบทดสอบ _private_funcผมอยากจะทดสอบฟังก์ชั่น 'ส่วนตัว' ฉันไม่เข้าใจว่าทำไมฉันถึงไม่เขียนการทดสอบถ้าในภายหลังฉันอาจปรับโครงสร้างให้กับโมดูลภายในของตัวเองแล้วเขียนการทดสอบ สมมติว่าฉันมีโมดูลที่มีฟังก์ชั่นต่อไปนี้ (มันอาจจะเป็นคลาส): def public_func(a): b = _do_stuff(a) return _do_more_stuff(b) _do_stuffและ_do_more_stuffเป็นฟังก์ชั่น 'ส่วนตัว' ของโมดูล ฉันเข้าใจความคิดที่ว่าเราควรทดสอบส่วนต่อประสานสาธารณะเท่านั้นไม่ใช่รายละเอียดการใช้งาน อย่างไรก็ตามนี่คือสิ่งที่: _do_stuffและ_do_more_stuffมีฟังก์ชั่นส่วนใหญ่ของโมดูล แต่ละคนอาจเป็นฟังก์ชั่นสาธารณะของโมดูล 'ภายใน' ที่แตกต่างกัน แต่พวกเขายังไม่พัฒนาและมีขนาดใหญ่พอที่จะแยกไปยังไฟล์แยก ดังนั้นการทดสอบฟังก์ชั่นเหล่านี้จึงถูกต้องเพราะมันเป็นหน่วยงานที่สำคัญ หากพวกเขาอยู่ในโมดูลที่แตกต่างกันเป็นฟังก์ชั่นสาธารณะเราจะได้ทดสอบพวกเขา ดังนั้นทำไมไม่ทดสอบพวกเขาเมื่อพวกเขายังไม่ได้ (หรือเคย) แยกเป็นไฟล์อื่น?
9 python  testing 

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

4
ผู้ตกแต่งชั้นเรียนใน Python: กรณีใช้งานจริง
ฉันกำลังมองหากรณีการใช้งานที่เป็นประโยชน์และไม่ใช้การสังเคราะห์ของผู้ตกแต่งคลาส Python จนถึงตอนนี้สิ่งเดียวที่ทำให้ฉันรู้สึกได้คือการลงทะเบียนชั้นเรียนในระบบผู้เผยแพร่ - สมาชิกเช่นปลั๊กอินหรือกิจกรรมเช่น: @register class MyPlugin(Plugin): pass หรือ @recieves_notifications class Console: def print(self, text): ... กรณีที่มีเหตุผลอื่น ๆ ที่ฉันคิดว่าอาจถูกสร้างขึ้นจากการสืบทอด metaclasses หรือวิธีการตกแต่ง คุณช่วยแบ่งปันตัวอย่างที่ดี (หรือไม่ดี) ของการใช้เครื่องมือตกแต่งชั้นเรียนได้ไหม? ขอบคุณ!

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