คำถามติดแท็ก c++

คำถามเกี่ยวกับ C ++ ซึ่งเป็นภาษาการเขียนแบบสแตติกแบบหลายกระบวนทัศน์รวบรวมภาษาการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไป

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

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 

1
มันเหมาะสมไหมที่จะใช้หลักการใน Redux กับภาษา OO?
Redux เป็นโปรแกรมที่ใช้งานได้เป็นหลักและมันสมเหตุสมผลดี เมื่อฉันย้ายกลับไปเป็นภาษา OOP ที่ไม่ใช่ javascript ในโครงการอื่นฉันต้องการใช้หลักการเดียวกันเช่นวัตถุสถานะเดียวตัวลดซึ่งทำหน้าที่ในส่วนของรัฐนั้นชั้นธุรกิจของการกระทำเชิงความหมายเพื่อปรับเปลี่ยนรัฐ โครงการของฉันอยู่ใน C ++ และฉันต้องการทราบว่ามันสมเหตุสมผลหรือไม่ที่จะลองใช้วิธีการที่ใช้งานได้และมีรูปแบบของ redux เพื่อออกแบบแอปพลิเคชัน ประสิทธิภาพไม่ได้สำคัญอย่างยิ่งสำหรับแอพนี้ แต่การบำรุงรักษาก็คือ ฉันต้องเผชิญปัญหาอะไรบ้างในการออกแบบแอพเช่นนี้ ฉันควรเพิ่มว่านี่ไม่ใช่แอป GUI และเมื่อคิดถึงมากกว่านั้น redux อาจลดประโยชน์ในแอปพลิเคชั่นที่ไม่ใช่ GUI เนื่องจากไม่มีเอฟเฟกต์ภาพโดยตรงจากการอัปเดตสถานะแอปพลิเคชัน

1
การห่อตามปกติของ C ++ เทมเพลตประเภท API ใน C
ฉันกำลังทำงานกับการห่อ C ++ API ซึ่งให้การเข้าถึงแหล่งข้อมูล (Hazelcast) ในฟังก์ชัน C เพื่อให้ที่เก็บข้อมูลสามารถเข้าถึงได้จากรหัส C เท่านั้น Hazelcast C ++ API สำหรับโครงสร้างข้อมูลแผนที่มีลักษณะดังนี้: auto map = hazelcastClient->client->getMap<int, string>(mapName); map.put(key, value); มันใช้ประโยชน์จากประเภทแม่แบบkeyและvalueพารามิเตอร์ เนื่องจากไม่มีเทมเพลตใน C ฉันจึงคิดเกี่ยวกับการสร้างฟังก์ชั่น wrapper สำหรับแต่ละความเชี่ยวชาญของgetMap<T, U>วิธี นั่นคือสำหรับแต่ละประเภท C แม้ว่าฉันรู้ว่ามีsignedและunsignedรุ่นของประเภท C, ฉันดีกับการ จำกัด API เพื่อสนับสนุนเฉพาะint, double, float, char *สำหรับและkeyvalue ดังนั้นฉันจึงเขียนสคริปต์ขนาดเล็กที่สร้างชุดค่าผสมทั้งหมดโดยอัตโนมัติ ฟังก์ชั่นที่ส่งออกมีลักษณะเช่นนี้: int Hazelcast_Map_put_int_string( Hazelcast_Client_t *hazelcastClient, const char …
9 c++  c  api-design 

5
ถูกต้องหรือไม่ที่จะบอกว่าตัวแปรเป็นตัวอย่างของชนิดข้อมูล
(ที่สามารถเปลี่ยนค่าได้ตลอดหลักสูตร) หรือ 'อินสแตนซ์ของบางสิ่งบางอย่าง' เกี่ยวข้องกับคลาสและวัตถุอย่างเคร่งครัดหรือไม่ ถ้าเป็นเช่นนั้นคุณจะกำหนดแนวคิดของ 'ตัวแปร' เมื่อมันมาถึง C ++ อย่างไร
9 c++  semantics 

5
การประกาศตัวแปรที่ผันแปรหมายความว่าอย่างไร
โปรแกรมในระดับต่ำจำนวนมากใช้คำระเหยชนิดสำหรับการทำแผนที่หน่วยความจำและดังกล่าว แต่ฉันเรียงลำดับของการสับสนว่าสิ่งที่มันจริงๆจะอยู่ในพื้นหลัง กล่าวอีกนัยหนึ่งหมายความว่าอย่างไรเมื่อคอมไพเลอร์ไม่ "เพิ่มประสิทธิภาพ" ที่อยู่หน่วยความจำ
9 c++  c  low-level 

2
การแยกส่วนอินเทอร์เฟซหลักการ: จะทำอย่างไรถ้าส่วนต่อประสานมีการทับซ้อนกันอย่างมีนัยสำคัญ?
จากการพัฒนาซอฟต์แวร์หลักการรูปแบบและการปฏิบัติ: Pearson New International Edition : บางครั้งวิธีที่เรียกใช้โดยกลุ่มลูกค้าที่แตกต่างกันจะทับซ้อนกัน หากการซ้อนทับมีขนาดเล็กดังนั้นอินเทอร์เฟซสำหรับกลุ่มควรจะแยกจากกัน ควรประกาศฟังก์ชันทั่วไปในอินเทอร์เฟซที่ทับซ้อนกันทั้งหมด คลาสเซิร์ฟเวอร์จะสืบทอดฟังก์ชันทั่วไปจากแต่ละอินเตอร์เฟสเหล่านั้น แต่จะใช้งานเพียงครั้งเดียว ลุงบ๊อบพูดถึงกรณีที่มีการเหลื่อมกันเล็กน้อย เราควรทำอย่างไรหากมีการทับซ้อนอย่างมีนัยสำคัญ บอกว่าเรามี Class UiInterface1; Class UiInterface2; Class UiInterface3; Class UiIterface : public UiInterface1, public UiInterface2, public UiInterface3{}; เราควรทำอย่างไรหากมีการทับซ้อนกันระหว่างUiInterface1และUiInterface2?

1
ตรวจสอบการออกแบบการทำให้เป็นอนุกรม C ++
ฉันกำลังเขียนแอปพลิเคชัน C ++ แอปพลิเคชันส่วนใหญ่อ่านและเขียนข้อมูลที่จำเป็นและนี่ก็ไม่มีข้อยกเว้น ฉันสร้างการออกแบบระดับสูงสำหรับตัวแบบข้อมูลและตรรกะการทำให้เป็นอนุกรม คำถามนี้ขอให้ตรวจสอบการออกแบบของฉันโดยคำนึงถึงเป้าหมายเฉพาะเหล่านี้: เพื่อให้มีวิธีที่ง่ายและยืดหยุ่นในการอ่านและเขียนข้อมูลในรูปแบบที่กำหนดเอง: raw binary, XML, JSON, และอื่น ๆ อัล รูปแบบของข้อมูลควรถูกแยกออกจากตัวข้อมูลเช่นเดียวกับรหัสที่ร้องขอการทำให้เป็นอนุกรม เพื่อให้แน่ใจว่าการทำให้เป็นอนุกรมนั้นไม่มีข้อผิดพลาดเท่าที่จะทำได้ I / O มีความเสี่ยงโดยเนื้อแท้ด้วยเหตุผลหลายประการ: การออกแบบของฉันแนะนำวิธีที่ล้มเหลวมากขึ้นหรือไม่? ถ้าเป็นเช่นนั้นฉันจะปรับการออกแบบใหม่เพื่อลดความเสี่ยงเหล่านั้นได้อย่างไร โครงการนี้ใช้ C ++ ไม่ว่าคุณจะรักหรือเกลียดมันเป็นภาษาที่มีวิธีการของตัวเองในการทำสิ่งต่าง ๆ และจุดมุ่งหมายของการออกแบบเพื่อให้ทำงานร่วมกับภาษาไม่ได้กับมัน สุดท้ายโครงการจะสร้างขึ้นบนwxWidgets ในขณะที่ฉันกำลังมองหาวิธีแก้ปัญหาที่เหมาะสมกับกรณีทั่วไปมากขึ้นการใช้งานเฉพาะนี้ควรใช้กับชุดเครื่องมือนั้น สิ่งที่ตามมาคือชุดคลาสที่ง่ายมากที่เขียนใน C ++ ที่แสดงการออกแบบ นี่ไม่ใช่คลาสจริงที่ฉันเขียนบางส่วนจนถึงตอนนี้รหัสนี้แสดงให้เห็นถึงการออกแบบที่ฉันใช้อยู่ ขั้นแรกให้บางตัวอย่าง DAO: #include <iostream> #include <map> #include <memory> #include <string> #include <vector> // One widget …
9 design  c++  c++11 

1
การพัฒนาที่เก็บคีย์ / ค่าที่ย้ายไปยัง C ++ ที่ทันสมัย
ฉันกำลังพัฒนาเซิร์ฟเวอร์ฐานข้อมูลที่คล้ายกับ Cassandra การพัฒนาเริ่มต้นใน C แต่สิ่งต่าง ๆ ก็ซับซ้อนมากโดยไม่ต้องเรียน ขณะนี้ฉันได้ย้ายทุกอย่างใน C ++ 11 แต่ฉันยังคงเรียนรู้ C ++ ที่ทันสมัยและยังมีข้อสงสัยมากมาย ฐานข้อมูลจะทำงานกับคู่ของคีย์ / ค่า ทุกคู่มีข้อมูลเพิ่มเติม - เมื่อถูกสร้างขึ้นด้วยเมื่อมันจะหมดอายุ (0 ถ้าไม่หมดอายุ) แต่ละคู่นั้นไม่เปลี่ยนรูป Key คือสตริง C ค่าเป็นโมฆะ * แต่อย่างน้อยตอนนี้ฉันทำงานด้วยค่าเป็นสตริง C เช่นกัน มีIListระดับนามธรรม มันสืบทอดมาจากสามชั้น VectorList - C dynamic array - คล้ายกับ std :: vector แต่ใช้ realloc LinkList - ทำเพื่อการตรวจสอบและเปรียบเทียบประสิทธิภาพ SkipList …

4
Rand () ให้ตัวเลขเดียวกันอีกครั้งสำหรับช่วงขนาดเล็ก
ฉันพยายามจัดเรียงเกมที่มีตาราง aa ขนาด 20x20 และฉันแสดงผู้เล่น (P) เป้าหมาย (T) และศัตรูสามคน (X) ทั้งหมดเหล่านี้มี X และ Y rand()ประสานงานที่ได้รับมอบหมายโดยใช้ ปัญหาคือว่าถ้าฉันพยายามที่จะได้รับคะแนนมากขึ้นในเกม (เติมพลังงาน ฯลฯ ) พวกเขาทับซ้อนกับจุดอื่น ๆ หนึ่งหรือมากกว่าเพราะช่วงที่มีขนาดเล็ก (รวม 1 ถึง 20) นี่คือตัวแปรของฉันและวิธีที่ฉันกำหนดค่า: ( COORDคือstructด้วย x และ a y เพียงอย่างเดียว) const int gridSize = 20; COORD player; COORD target; COORD enemy1; COORD enemy2; COORD enemy3; //generate …
9 c++  random 

4
ฉันจะให้วัตถุโต้ตอบและสื่อสารกันโดยไม่บังคับลำดับชั้นได้อย่างไร
ฉันหวังว่าการพูดจาโผงผางเหล่านี้จะทำให้คำถามของฉันชัดเจน - ฉันเข้าใจโดยสิ้นเชิงถ้าพวกเขาไม่ได้ดังนั้นแจ้งให้เราทราบว่าเป็นกรณีนี้และฉันจะพยายามทำให้ตัวเองชัดเจนขึ้น พบกับBoxPongเกมง่ายๆที่ฉันสร้างความคุ้นเคยกับการพัฒนาเกมเชิงวัตถุ ลากกล่องเพื่อควบคุมลูกบอลและรวบรวมสิ่งที่เป็นสีเหลือง การทำให้ BoxPong ช่วยฉันกำหนดคำถามพื้นฐาน: ฉันจะมีวัตถุที่มีปฏิสัมพันธ์ซึ่งกันและกันโดยไม่ต้อง "เป็น" กันได้อย่างไร กล่าวอีกนัยหนึ่งมีวิธีที่วัตถุจะไม่เป็นลำดับชั้น แต่แทนที่จะอยู่ร่วมกันหรือไม่ (ฉันจะเข้าไปดูรายละเอียดเพิ่มเติมด้านล่าง) ฉันสงสัยว่าปัญหาของวัตถุที่อยู่ร่วมกันนั้นเป็นปัญหาทั่วไปดังนั้นฉันหวังว่าจะมีวิธีการแก้ไขที่แน่นอน ฉันไม่ต้องการที่จะสร้างใหม่ล้อสี่เหลี่ยมดังนั้นฉันเดาคำตอบที่ดีที่สุดที่ฉันกำลังมองหาคือ "นี่เป็นรูปแบบการออกแบบที่ใช้กันทั่วไปในการแก้ปัญหาของคุณ" โดยเฉพาะอย่างยิ่งในเกมง่ายๆเช่น BoxPong เป็นที่ชัดเจนว่ามีหรือควรมีวัตถุจำนวนหนึ่งอยู่ร่วมกันในระดับเดียวกัน มีกล่องมีลูกบอลมีของสะสม ทั้งหมดที่ฉันสามารถแสดงในภาษาเชิงวัตถุแม้ว่า - หรือเพื่อให้ดูเหมือน - มีความสัมพันธ์HAS-A ที่เข้มงวด ทำผ่านตัวแปรสมาชิก ฉันไม่สามารถเริ่มballและปล่อยให้มันทำสิ่งนั้นฉันต้องการให้มันเป็นของวัตถุอื่นอย่างถาวร ฉันได้ตั้งค่าเพื่อให้วัตถุหลักของเกมมีกล่องและกล่องนั้นมีลูกบอลและมีตัวนับคะแนน แต่ละวัตถุยังมีupdate()วิธีการซึ่งจะคำนวณตำแหน่งทิศทาง ฯลฯ และฉันไปลักษณะที่คล้ายกันที่นั่นผมเรียกวิธีการอัพเดตเกมวัตถุหลักซึ่งเรียกวิธีการปรับปรุงของเด็กทุกคนของตนและพวกเขาในทางกลับกันเรียกวิธีการปรับปรุงทั้งหมดของพวกเขาเด็ก นี่เป็นวิธีเดียวที่ฉันสามารถเห็นการสร้างเกมเชิงวัตถุ แต่ฉันรู้สึกว่ามันไม่ใช่วิธีที่เหมาะ ท้ายที่สุดฉันจะไม่คิดว่าลูกบอลเป็นของกล่อง แต่อยู่ในระดับเดียวกันและมีปฏิสัมพันธ์กับมัน ฉันคิดว่าสามารถทำได้โดยการเปลี่ยนวัตถุเกมทั้งหมดเป็นตัวแปรสมาชิกของวัตถุเกมหลัก แต่ฉันไม่เห็นว่าการแก้ปัญหาอะไร ฉันหมายถึง ... ทิ้งความยุ่งเหยิงที่เห็นได้ชัดจะมีวิธีใดสำหรับลูกบอลและกล่องที่จะรู้จักซึ่งกันและกันนั่นคือการโต้ตอบ? นอกจากนี้ยังมีปัญหาของวัตถุที่ต้องการส่งผ่านข้อมูลระหว่างกัน ฉันมีประสบการณ์ค่อนข้างน้อยในการเขียนโค้ดสำหรับ SNES ซึ่งคุณสามารถเข้าถึง RAM ทั้งหมดได้ตลอดเวลา สมมติว่าคุณกำลังสร้างศัตรูที่กำหนดเองสำหรับSuper Mario …

2
การออกแบบคลาสยกเว้น
ฉันกำลังเขียนโค้ดไลบรารีขนาดเล็กและฉันมีปัญหากับการออกแบบการจัดการข้อยกเว้น ฉันต้องบอกว่าฉันยังคงสับสนกับคุณสมบัติของภาษา C ++ และพยายามอ่านให้มากที่สุดเท่าที่จะเป็นไปได้เพื่อทำความเข้าใจกับสิ่งที่ฉันต้องทำเพื่อทำงานกับคลาสยกเว้นอย่างเหมาะสม ฉันตัดสินใจใช้system_errorวิธีการที่ได้แรงบันดาลใจจากการใช้งาน STL ของfuture_errorชั้นเรียน ฉันมีการแจงนับที่มีรหัสข้อผิดพลาด: enum class my_errc : int { error_x = 100, error_z = 101, error_y = 102 }; และคลาสข้อยกเว้นเดียว (สำรองตามerror_categoryประเภทของโครงสร้างและทุกอย่างอื่นที่จำเป็นโดยsystem_errorรุ่น): // error category implementation class my_error_category_impl : public std::error_category { const char* name () const noexcept override { return "my_lib"; } std::string message …

7
ความรู้ที่ลึกซึ้งของ C ++ จะช่วยคุณในการเรียนรู้ภาษาอื่น ๆ เร็วขึ้น / ง่ายขึ้นหรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา มีความเป็นไปได้ไหมที่ใครบางคนที่เรียนรู้ทุกแง่มุมที่สำคัญของ C ++ และรู้พื้นฐานของภาษาเป็นอย่างดีจะเรียนรู้ภาษาอื่น ๆ (เช่น Python, Perl, Java) เร็วขึ้นและง่ายขึ้นหรือไม่
9 c++ 

5
กำจัดวัตถุอย่างถูกต้องเมื่อเซิร์ฟเวอร์ถูกยกเลิก
ฉันกำลังทำงานในโครงการ C ++ ขนาดใหญ่ ประกอบด้วยในเซิร์ฟเวอร์ที่เปิดเผย REST API ให้ส่วนติดต่อที่เรียบง่ายและใช้งานง่ายสำหรับระบบที่กว้างมากซึ่งประกอบด้วยเซิร์ฟเวอร์อื่น ๆ codebase นั้นค่อนข้างใหญ่และซับซ้อนและพัฒนาไปตามกาลเวลาโดยไม่มีการออกแบบที่เหมาะสม งานของฉันคือการใช้คุณสมบัติใหม่และ refactor / แก้ไขรหัสเก่าเพื่อให้มีเสถียรภาพและเชื่อถือได้มากขึ้น ในขณะนี้เซิร์ฟเวอร์สร้างวัตถุที่มีอายุยืนยาวจำนวนหนึ่งซึ่งไม่เคยยกเลิกหรือกำจัดเมื่อกระบวนการยุติลง สิ่งนี้ทำให้ Valgrind เกือบจะใช้การไม่ได้สำหรับการตรวจจับการรั่วไหลเนื่องจากเป็นไปไม่ได้ที่จะแยกแยะระหว่างการรั่วไหลที่ถูกต้องตามกฎหมายนับพันจากการ "ที่อันตราย" ความคิดของฉันคือการตรวจสอบให้แน่ใจว่าวัตถุทั้งหมดถูกกำจัดก่อนที่จะถูกยกเลิก แต่เมื่อฉันทำข้อเสนอนี้เพื่อนร่วมงานและเจ้านายของฉันไม่เห็นด้วยฉันชี้ให้เห็นว่าระบบปฏิบัติการจะเพิ่มหน่วยความจำนั้นต่อไป จะทำให้การปิดเซิร์ฟเวอร์ช้าลง (ซึ่งในขณะนี้เป็นการเรียกไปยังstd::exit) ฉันตอบว่าการมีขั้นตอนการปิด "สะอาด" ไม่ได้แปลว่าต้องใช้ เราสามารถโทรstd::quick_exitหรือkill -9ดำเนินการได้ตลอดเวลาหากเรารู้สึกใจร้อน พวกเขาตอบว่า "daemons Linux และกระบวนการส่วนใหญ่ไม่ต้องกังวลเรื่องการเพิ่มหน่วยความจำเมื่อปิดเครื่อง" ในขณะที่ฉันเห็นว่ามันเป็นความจริงที่ว่าโครงการของเราต้องการการแก้ไขข้อบกพร่องของหน่วยความจำที่แม่นยำเนื่องจากฉันได้พบความผิดพลาดของหน่วยความจำดับเบิ้ลอิสระและตัวแปรเริ่มต้น คุณคิดยังไง? ฉันกำลังพยายามอย่างไม่มีจุดหมายหรือไม่? ถ้าไม่ฉันจะโน้มน้าวใจเพื่อนร่วมงานและเจ้านายของฉันได้อย่างไร ถ้าเป็นเช่นนั้นทำไมและควรทำอย่างไร
9 c++  debugging  memory 

6
แยกอินเตอร์เฟซที่มีขนาดใหญ่
ฉันใช้อินเตอร์เฟสขนาดใหญ่ที่มีประมาณ 50 วิธีในการเข้าถึงฐานข้อมูล ส่วนต่อประสานถูกเขียนขึ้นโดยเพื่อนร่วมงานของฉัน เราพูดถึงเรื่องนี้: ฉัน: 50 วิธีมากเกินไป มันเป็นกลิ่นรหัส เพื่อนร่วมงาน: ฉันต้องทำอย่างไรกับเรื่องนี้? คุณต้องการเข้าถึงฐานข้อมูล - คุณมีมัน ฉัน: ใช่ แต่มันไม่ชัดเจนและไม่สามารถบำรุงรักษาได้ในอนาคต เพื่อนร่วมงาน: โอเคคุณพูดถูกมันไม่ดีเลย อินเตอร์เฟสควรมีหน้าตาเป็นอย่างไร? ฉัน: วิธีการประมาณ 5 วิธีที่ส่งคืนวัตถุที่มีเช่น 10 วิธีในแต่ละวิธี? อืม แต่นี่จะไม่เหมือนกันหรือ สิ่งนี้นำไปสู่ความชัดเจนมากขึ้นหรือไม่? มันคุ้มค่ากับความพยายามหรือไม่? ทุก ๆ ครั้งที่ฉันอยู่ในสถานการณ์ที่ฉันต้องการอินเทอร์เฟซและสิ่งแรกที่นึกได้ก็คืออินเทอร์เฟซใหญ่ มีรูปแบบการออกแบบทั่วไปสำหรับสิ่งนี้หรือไม่? อัปเดต (ตอบกลับความคิดเห็นของ SJuan): "ชนิดวิธีการ": เป็นอินเทอร์เฟซสำหรับดึงข้อมูลจากฐานข้อมูล วิธีการทั้งหมดมีรูปแบบ (pseudocode) List<Typename> createTablenameList() วิธีการและตารางไม่ได้อยู่ในความสัมพันธ์ 1-1 อย่างชัดเจนสิ่งสำคัญคือความจริงที่ว่าคุณได้รับรายการบางประเภทที่มาจากฐานข้อมูลเสมอ

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