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

คำถามเกี่ยวกับการแก้ปัญหาและการวางแผนแก้ปัญหาผ่านการออกแบบซอฟต์แวร์

4
มันเป็น "ผิด" / การออกแบบที่ไม่ดีที่จะนำคนงานกระทู้ / พื้นหลังในชั้นเรียนหรือไม่?
ฉันมีชั้นเรียนที่จะอ่านจาก Excel (C # และ. Net 4) และในชั้นเรียนนั้นฉันมีผู้ทำงานเบื้องหลังที่จะโหลดข้อมูลจาก Excel ในขณะที่ UI สามารถตอบสนองได้ คำถามของฉันมีดังต่อไปนี้: การออกแบบที่ไม่ดีที่จะมีคนทำงานเบื้องหลังในชั้นเรียนหรือไม่? ฉันควรสร้างชั้นเรียนโดยไม่มีมันและใช้ผู้ทำงานเบื้องหลังเพื่อทำงานในชั้นเรียนนั้นหรือไม่? ฉันไม่เห็นปัญหาใด ๆ ในการสร้างชั้นเรียนของฉันด้วยวิธีนี้ แต่จากนั้นอีกครั้งฉันเป็นมือใหม่ดังนั้นฉันจึงคิดว่าฉันจะทำให้แน่ใจก่อนที่ฉันจะดำเนินการต่อ ฉันหวังว่าคำถามนี้เกี่ยวข้องกับที่นี่เพราะฉันไม่คิดว่ามันควรจะเป็นแบบ stackoverflow เนื่องจากรหัสของฉันทำงานได้นี่เป็นเพียงปัญหาการออกแบบ

5
เป็นไปได้ไหมที่จะใช้ DRY โดยไม่ต้องมีเพศสัมพันธ์เพิ่มขึ้น?
สมมติว่าเรามีโมดูลซอฟต์แวร์ A ที่ใช้ฟังก์ชั่น F. โมดูล B อื่นใช้ฟังก์ชั่นเดียวกับ F ' มีหลายวิธีในการกำจัดรหัสที่ซ้ำกัน: ให้ใช้ F 'จาก B ให้ B ใช้ F จาก A ใส่ F ลงในโมดูล C ของตัวเองและปล่อยให้ทั้ง A และ B ใช้งาน ตัวเลือกเหล่านี้ทั้งหมดสร้างการพึ่งพาเพิ่มเติมระหว่างโมดูล พวกเขาใช้หลักการ DRY ที่ค่าใช้จ่ายของการมีเพศสัมพันธ์ที่เพิ่มขึ้น เท่าที่ฉันเห็นการมีเพศสัมพันธ์จะเพิ่มขึ้นเสมอหรือเมื่อถูกเช่าไปในระดับที่สูงขึ้นเมื่อใช้ DRY ดูเหมือนจะมีข้อขัดแย้งระหว่างหลักการพื้นฐานสองข้อที่สำคัญที่สุดของการออกแบบซอฟต์แวร์ (ที่จริงแล้วฉันไม่คิดว่ามันน่าแปลกใจที่มีความขัดแย้งเช่นนั้นนี่อาจเป็นสิ่งที่ทำให้การออกแบบซอฟต์แวร์ที่ดีเป็นเรื่องยากมากฉันรู้สึกประหลาดใจที่โดยทั่วไปแล้วความขัดแย้งเหล่านี้ไม่ได้ระบุไว้ในตำราเบื้องต้น) แก้ไข (เพื่อความกระจ่าง): ฉันคิดว่าความเท่าเทียมกันของ F และ F 'ไม่ใช่แค่เรื่องบังเอิญ หาก F ต้องได้รับการแก้ไข F 'จะต้องได้รับการแก้ไขในลักษณะเดียวกัน

3
การสร้างหลาย ๆ การใช้งาน DI สิ้นหวังไหม ใช้บริการระบุตำแหน่งหรือไม่
สมมติว่าเรามีลูกค้า 1001 รายที่สร้างการพึ่งพาโดยตรงแทนที่จะยอมรับการฉีด Refactoring the 1001 ไม่ใช่ตัวเลือกตามที่เจ้านายของเรา จริงๆแล้วเราไม่ได้รับอนุญาตให้เข้าถึงแหล่งข้อมูลของพวกเขาเพียงแค่ไฟล์คลาส สิ่งที่เราควรจะทำคือ "ปรับปรุง" ระบบที่ลูกค้า 1001 เหล่านี้ผ่านให้ได้ เราสามารถ refactor ที่เราชอบ การพึ่งพาเป็นส่วนหนึ่งของระบบนั้น และการพึ่งพาเหล่านั้นบางอย่างเราควรเปลี่ยนไปใช้การติดตั้งใหม่ สิ่งที่เราต้องการจะทำคือมีความสามารถในการกำหนดค่าการใช้งานที่แตกต่างกันของการอ้างอิงเพื่อตอบสนองลูกค้าจำนวนมากนี้ น่าเสียดายที่ DI ไม่ได้ดูตัวเลือกเนื่องจากลูกค้าไม่ยอมรับการฉีดด้วยตัวสร้างหรือผู้ตั้งค่า ตัวเลือก: 1) Refactor การปรับใช้บริการที่ลูกค้าใช้เพื่อให้เป็นไปตามที่ลูกค้าต้องการ ปังเราเสร็จแล้ว ไม่ยืดหยุ่น ไม่ซับซ้อน 2) ปรับโครงสร้างการนำไปใช้ใหม่เพื่อให้ผู้รับมอบสิทธิ์สามารถทำงานให้กับการพึ่งพาอื่นที่ได้มาจากโรงงาน ตอนนี้เราสามารถควบคุมว่าการใช้งานแบบใดที่พวกเขาใช้โดยการปรับโครงสร้างโรงงานอีกครั้ง 3) ปรับโครงสร้างการนำไปใช้ใหม่เพื่อให้ผู้รับมอบสิทธิ์สามารถทำงานได้กับการพึ่งพาอื่นที่ได้รับผ่านตัวระบุบริการ ตอนนี้เราสามารถควบคุมได้ว่าการใช้งานใดที่พวกเขาใช้โดยการกำหนดค่าบริการตัวระบุตำแหน่งซึ่งอาจเป็นhashmapสตริงของวัตถุที่มีการแคสต์เล็กน้อย 4) บางสิ่งที่ฉันยังไม่ได้คิดเลย วัตถุประสงค์: ลดความเสียหายที่เกิดจากการออกแบบโดยการลากรหัสลูกค้าเก่าที่ออกแบบมาไม่ดีในอนาคตโดยไม่เพิ่มความซับซ้อนที่ไม่มีจุดหมาย ลูกค้าไม่ควรจะรู้หรือควบคุมการดำเนินงานของการอ้างอิงของพวกเขา newแต่พวกเขายืนยันในการสร้างพวกเขาด้วย เราไม่สามารถควบคุมได้newแต่เราควบคุมชั้นเรียนที่พวกเขากำลังสร้าง คำถามของฉัน: ฉันไม่ได้พิจารณาอะไร คำถามจาก Doc Brown คุณต้องการความเป็นไปได้ที่จะกำหนดค่าระหว่างการใช้งานที่แตกต่างกันหรือไม่? เพื่อจุดประสงค์อะไร? ความว่องไว …

5
สไตล์การเข้ารหัส OOP: เริ่มต้นทุกอย่างบนตัวสร้างหรือไม่
ฉันยังคิดว่าตัวเองเป็นโปรแกรมเมอร์ฝึกงานดังนั้นฉันมักจะมองหาวิธีที่ "ดีกว่า" สำหรับการเขียนโปรแกรมทั่วไป วันนี้เพื่อนร่วมงานของฉันแย้งว่าสไตล์การเขียนรหัสของฉันทำงานได้โดยไม่จำเป็นและฉันต้องการฟังความคิดเห็นจากผู้อื่น โดยทั่วไปเมื่อฉันออกแบบคลาสในภาษา OOP (โดยทั่วไปคือ C ++ หรือ Python) ฉันจะแยกการกำหนดค่าเริ่มต้นออกเป็นสองส่วน: class MyClass1 { public: Myclass1(type1 arg1, type2 arg2, type3 arg3); initMyClass1(); private: type1 param1; type2 param2; type3 param3; type4 anotherParam1; }; // Only the direct assignments from the input arguments are done in the constructor MyClass1::myClass1(type1 arg1, type2 …

1
เป็นการดีที่จะใช้วิธีการเริ่มต้น Java 8 สองวิธีในแง่ของกันและกัน?
ฉันออกแบบอินเทอร์เฟซด้วยสองวิธีที่เกี่ยวข้องคล้ายกับสิ่งนี้: public interface ThingComputer { default Thing computeFirstThing() { return computeAllThings().get(0); } default List<Thing> computeAllThings() { return ImmutableList.of(computeFirstThing()); } } การใช้งานประมาณครึ่งหนึ่งจะคำนวณสิ่งหนึ่งเท่านั้นในขณะที่อีกครึ่งหนึ่งอาจคำนวณเพิ่มเติมได้ สิ่งนี้มีแบบอย่างใด ๆ ในโค้ด Java 8 ที่ใช้กันอย่างแพร่หลายหรือไม่? ฉันรู้ว่า Haskell ทำสิ่งที่คล้ายกันในบางประเภทEqของตัวอย่าง( เช่น) ข้อเสียคือฉันต้องเขียนโค้ดน้อยกว่าอย่างมากถ้าฉันมีบทคัดย่อสองคลาส ( SingleThingComputerและMultipleThingComputer) ข้อเสียก็คือการคอมไพล์การดำเนินงานที่ว่างเปล่า StackOverflowErrorแต่พัดขึ้นที่รันไทม์กับ เป็นไปได้ที่จะตรวจสอบการเรียกซ้ำซึ่งกันและกันด้วย a ThreadLocalและให้ข้อผิดพลาดที่ดีกว่า แต่นั่นเป็นการเพิ่มโอเวอร์เฮดให้กับโค้ดที่ไม่ใช่บั๊ก

3
วิธีการยึดมั่นในหลักการเปิดในทางปฏิบัติ
ฉันเข้าใจเจตนาของหลักการแบบเปิด มันหมายถึงการลดความเสี่ยงของการทำลายบางสิ่งบางอย่างที่ใช้งานได้แล้วในขณะที่แก้ไขโดยบอกให้คุณพยายามขยายโดยไม่ต้องแก้ไข อย่างไรก็ตามฉันมีปัญหาในการทำความเข้าใจวิธีการใช้หลักการนี้ในทางปฏิบัติ เพื่อความเข้าใจของฉันมีสองวิธีในการใช้มัน ก่อนและหลังการเปลี่ยนแปลงที่เป็นไปได้: ก่อน: โปรแกรมไปยัง abstractions และ 'ทำนายอนาคต' มากที่สุดเท่าที่จะทำได้ ตัวอย่างเช่นวิธีการdrive(Car car)จะต้องเปลี่ยนหาก Motorcycleมีการเพิ่ม s ในระบบในอนาคตดังนั้นจึงอาจละเมิด OCP แต่วิธีdrive(MotorVehicle vehicle)นี้มีแนวโน้มที่จะไม่เปลี่ยนแปลงในอนาคตดังนั้นจึงเป็นไปตาม OCP อย่างไรก็ตามมันค่อนข้างยากที่จะทำนายอนาคตและรู้ล่วงหน้าว่าการเปลี่ยนแปลงใดที่จะเกิดขึ้นกับระบบ หลังจาก: เมื่อต้องการการเปลี่ยนแปลงให้ขยายคลาสแทนการแก้ไขเป็นรหัสปัจจุบัน แบบฝึก # 1 ไม่ยากที่จะเข้าใจ อย่างไรก็ตามมันเป็นข้อปฏิบัติที่ 2 ที่ฉันมีปัญหาในการทำความเข้าใจวิธีการสมัคร ยกตัวอย่างเช่น (ฉันเอามันจากวิดีโอบน YouTube): ขอบอกว่าเรามีวิธีการในระดับที่ยอมรับได้วัตถุ:CreditCard makePayment(CraditCard card)หนึ่งวันVoucherจะถูกเพิ่มเข้าไปในระบบ วิธีนี้ไม่รองรับพวกมันดังนั้นจึงต้องมีการแก้ไข เมื่อนำวิธีการนี้ไปใช้ในตอนแรกเราไม่สามารถคาดการณ์อนาคตและโปรแกรมในแง่นามธรรมได้มากขึ้น (เช่นmakePayment(Payment pay)ดังนั้นตอนนี้เราต้องเปลี่ยนรหัสที่มีอยู่ แบบฝึกหัดที่ 2 กล่าวว่าเราควรเพิ่มฟังก์ชันการทำงานโดยขยายแทนการปรับเปลี่ยน นั่นหมายความว่าอย่างไร? ฉันควรคลาสย่อยคลาสที่มีอยู่แทนที่เพียงแค่เปลี่ยนเป็นรหัสเดิมหรือไม่ ฉันควรทำเสื้อคลุมบางอย่างเพื่อหลีกเลี่ยงการเขียนรหัสใหม่หรือไม่? หรือหลักการไม่ได้อ้างถึง 'วิธีการแก้ไข / เพิ่มฟังก์ชันการทำงานที่ถูกต้อง' …

8
ความคิดและการออกแบบก่อนการเข้ารหัส: ความจริงเรื่องนี้มีเท่าใด? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันเรียนที่โรงเรียนเช่นเดียวกับที่ฉันอ่านทุกที่ว่าวิธีการพัฒนาที่ดีต้องมีความคิดและการออกแบบก่อนที่จะเขียนโค้ดอย่างถูกต้อง นั่นไม่ใช่ข้อมูลใหม่แม้แต่สำหรับโปรแกรมเมอร์มือใหม่ อย่างไรก็ตามฉันสงสัยว่านี่เป็นคำแนะนำที่ดีเพราะตั้งแต่ฉันเริ่มพัฒนาในหลายภาษาโปรแกรมฉันไม่เคยประสบความสำเร็จในการออกแบบและเข้าใจทุกอย่างตั้งแต่เริ่มต้น ฉันหมายถึงฉันมักจะละลายความคิดการออกแบบและการเขียนโปรแกรม ฉันเป็นนักพัฒนาที่เลวร้ายที่สุดในโลกหรือเป็นความคิดที่เราเรียนรู้ที่โรงเรียนเพียงแค่ความเชื่อทางศาสนาที่ไม่มีความหมายเก่า เราจะตั้งครรภ์และออกแบบสิ่งที่เราไม่เคยมีประสบการณ์และตั้งโปรแกรมมาก่อนได้อย่างไร มันไร้สาระใช่มั้ย การเขียนโปรแกรมไม่ได้นำไปสู่ความคิดและการออกแบบแทนหรือไม่?

5
ฉันควรเขียน API อินเตอร์เฟสก่อนการใช้งานหรือไม่
ฉันได้ทำการค้นคว้าเพิ่มเติมเกี่ยวกับการเขียนโปรแกรม "ที่เป็นระเบียบ" เมื่อเร็ว ๆ นี้และฉันได้เรียนรู้ว่าฉันควรจะเขียนโปรแกรมไปยังอินเทอร์เฟซไม่ใช่การใช้งาน โดยที่ในใจมันจะดีกว่าหรือไม่ที่จะ "ร่าง" โครงการในส่วนต่อประสานก่อนที่จะเขียนการนำไปปฏิบัติในที่ที่เป็นไปได้? และถ้าเป็นกรณีนี้ในกรณีของการใช้ไลบรารี่ของบุคคลที่สาม (เช่น Lidgren) ฉันควรจะห่อมันไว้ในส่วนต่อประสานและแก้ไขมันผ่านคอนเทนเนอร์ IOC หรือไม่

2
การตัดสินใจออกแบบ - ทำไมต้องสร้าง <p> โดยไม่มี </p>
TL; DR บางโปรแกรมที่ใช้กันอย่างแพร่หลาย, ซึ่งสร้าง html, จะสร้างแท็กเปิดย่อหน้าเท่านั้น, และไม่ปิดโปรแกรม, โดยสันนิษฐานว่าเบราว์เซอร์จะปิดย่อหน้าอย่างเหมาะสม. บนใบหน้าของมันดูเหมือนว่าฉันว่าเบราว์เซอร์จะปิดย่อหน้าอย่างถูกต้องไม่ถูกต้อง การตีความของฉันถูกต้องหรือไม่ โดยทั่วไปแล้วการแลกเปลี่ยนอะไรที่เกี่ยวข้องกับการตัดสินใจประเภทนี้? การค้นหาผ่านซอร์สโค้ด moinmoin บรรทัดของรหัสต่อไปนี้ดึงดูดสายตาของฉัน: # We only open those tags and let the browser auto-close them: _auto_closing_tags = set(['p']) ( แหล่งที่มา ) หลังจากอ่านส่วนที่เหลือของการนำไปใช้ฉันเชื่อมั่นว่าใช่แน่นอนเมื่อ moinmoin สร้างรหัส html สำหรับหน้าใดหน้าหนึ่งของมันมันจะสร้างแท็กเปิดย่อหน้าอย่างถูกต้องตามความเหมาะสมในขณะเดียวกันก็ตั้งใจหลีกเลี่ยง แท็กปิดย่อหน้า (แม้จะสามารถทำได้เล็กน้อย) สำหรับกรณีการใช้งานที่เฉพาะเจาะจงของฉันค่อนข้างผิดปกติพฤติกรรมนี้ไม่ถูกต้อง ฉันถูกล่อลวงให้ส่งรายงานข้อผิดพลาดและ / หรือเปลี่ยนพฤติกรรม อย่างไรก็ตามดูเหมือนว่าการตัดสินใจการออกแบบนี้ได้ทำขึ้นมาอย่างพิถีพิถันแล้ว ฉันไม่เก่งพอในความซับซ้อนของมาตรฐาน html หรือการใช้งานเบราว์เซอร์ต่าง ๆ เพื่อให้สามารถบอกได้ว่านี่เป็นพฤติกรรมที่ถูกต้องโดยทั่วไปและฉันมีความรู้สึกว่าสัญชาตญาณของฉันในการแก้ไข / …

10
เหตุใด RDBMS จึงไม่ส่งคืนตารางที่เข้าร่วมในรูปแบบที่ซ้อนกัน
ตัวอย่างเช่นฉันต้องการดึงข้อมูลผู้ใช้และหมายเลขโทรศัพท์และที่อยู่อีเมลทั้งหมดของเขา หมายเลขโทรศัพท์และอีเมลจะถูกเก็บไว้ในตารางแยกต่างหากผู้ใช้หนึ่งรายไปยังโทรศัพท์ / อีเมลจำนวนมาก ฉันสามารถทำได้ค่อนข้างง่าย: SELECT * FROM users user LEFT JOIN emails email ON email.user_id=user.id LEFT JOIN phones phone ON phone.user_id=user.id ปัญหานี้คือการส่งคืนชื่อผู้ใช้ DOB สีที่ชื่นชอบและข้อมูลอื่น ๆ ทั้งหมดที่จัดเก็บในตารางผู้ใช้ซ้ำแล้วซ้ำอีกสำหรับแต่ละระเบียน (ผู้ใช้บันทึกอีเมลโทรศัพท์) สันนิษฐานว่ากินแบนด์วิดท์ ลงผลลัพธ์ จะดีกว่าไหมถ้ามันส่งคืนแถวเดียวสำหรับผู้ใช้แต่ละคนและภายในบันทึกนั้นมีรายการอีเมลและรายการโทรศัพท์หรือไม่ มันจะทำให้ข้อมูลทำงานได้ง่ายขึ้นด้วยเช่นกัน ฉันรู้ว่าคุณสามารถรับผลลัพธ์เช่นนี้โดยใช้ LINQ หรือกรอบงานอื่น ๆ แต่ดูเหมือนว่ามันจะเป็นจุดอ่อนในการออกแบบฐานข้อมูลเชิงสัมพันธ์ เราสามารถแก้ไขได้โดยใช้ NoSQL แต่ไม่ควรมีพื้นกลางบ้าง ฉันพลาดอะไรไปรึเปล่า? ทำไมจึงไม่มีสิ่งนี้ * ใช่มันถูกออกแบบด้วยวิธีนี้ ฉันเข้าใจแล้ว ฉันสงสัยว่าทำไมไม่มีทางเลือกอื่นให้ทำงานด้วยได้ง่ายขึ้น SQL สามารถทำสิ่งที่มันทำอยู่ต่อไป แต่จากนั้นพวกเขาสามารถเพิ่มคำสำคัญหรือสองคำเพื่อทำ post-processing …
14 design  sql  rdbms 

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

3
การแยกวิเคราะห์ไฟล์ทั่วไปใน Java โดยใช้รูปแบบกลยุทธ์
ฉันกำลังทำงานกับผลิตภัณฑ์ที่ความรับผิดชอบของหนึ่งในโมดูลคือการแยกวิเคราะห์ไฟล์ XML และถ่ายโอนเนื้อหาที่ต้องการในฐานข้อมูล แม้ว่าความต้องการในปัจจุบันจะเป็นเพียงการแยกวิเคราะห์ไฟล์ XML แต่ฉันต้องการออกแบบโมดูลการแยกวิเคราะห์ในแบบที่ฉันสามารถรองรับไฟล์ประเภทใดก็ได้ในอนาคต เหตุผลสำหรับวิธีนี้คือเรากำลังสร้างผลิตภัณฑ์นี้สำหรับลูกค้าเฉพาะ แต่วางแผนที่จะขายให้กับลูกค้ารายอื่นในอนาคตอันใกล้ ระบบทั้งหมดในระบบนิเวศสำหรับลูกค้าปัจจุบันผลิตและใช้ไฟล์ XML แต่นี่อาจไม่เป็นกรณีสำหรับลูกค้ารายอื่น ฉันพยายามทำอะไรจนถึงตอนนี้? (ปัจจุบัน) ฉันมีการออกแบบต่อไปนี้ในใจซึ่งขึ้นอยู่กับรูปแบบกลยุทธ์ ฉันได้เขียนรหัสลงในคราสอย่างรวดเร็วเพื่อถ่ายทอดการออกแบบของฉันดังนั้นมันจะดีมากหากแง่มุมอื่น ๆ เช่นวิธีการที่เหมาะสมในการจัดการข้อยกเว้นถูกละเว้นในตอนนี้ Parser:อินเตอร์เฟสกลยุทธ์ที่แสดงเมธอดการวิเคราะห์ public interface Parser&lt;T&gt; { public T parse(String inputFile); } * เหตุผลในการใช้พารามิเตอร์ทั่วไปคืออนุญาตประเภทการส่งคืนใด ๆ รวมถึงความปลอดภัยของประเภทในเวลารวบรวม ProductDataXmlParserคลาสที่เป็นรูปธรรมสำหรับการวิเคราะห์ไฟล์ product.xml ที่มีข้อมูลที่เกี่ยวข้องกับผลิตภัณฑ์ (ใช้ XMLBeans) public class ProductDataXmlParser implements Parser&lt;ProductDataTYPE&gt; { public ProductDataTYPE parse(String inputFile) { ProductDataTYPE productDataDoc = …
14 java  design  parsing  xml 

1
เราใช้รูปแบบพื้นที่เก็บข้อมูลใช่มั้ย
เรากำลังใช้คลาสที่แยกจากกัน-repositoryเพื่อต่อท้ายเรียกข้อมูลจากฐานข้อมูล สำหรับแต่ละตารางที่เก็บของตนเอง ตัวอย่างเช่นเรามีcustomerrepositoryคลาสที่มีวิธีการทุกอย่างเพื่อดึงลูกค้าและvacancyrepositoryที่มีวิธีการทุกชนิดเพื่อดึงตำแหน่งที่ว่าง ฉันมีคำถามสองข้อเกี่ยวกับวิธีการทำสิ่งนี้: วิธีรับข้อมูลที่ครอบคลุมหลายตาราง ตัวอย่างเช่นฉันมีหน้าจอที่แสดงลูกค้าทั้งหมดที่ยังไม่ได้สร้างตำแหน่งว่าง ที่สามารถcustomerrepositoryใช้วิธีการจากvacancyrespositoryหรือทำทั้งสองอย่างที่เก็บกลับผลลัพธ์และจะมีระดับที่สูงขึ้นในลำดับชั้น (ชื่อให้ของมันdataservice) ที่ได้รับผลจากทั้งเก็บและรวมเป็น 1 ผล? พื้นที่เก็บข้อมูลสามารถจัดการตรรกะได้เท่าใด ฉันคิดว่ามันโอเคที่จะใช้ 'where active == true' ในที่เก็บเพื่อเรียกใช้เฉพาะเร็กคอร์ดที่ใช้งานอยู่หรือว่าควรจัดการตรรกะง่ายๆโดยคลาสที่สูงกว่าในลำดับชั้น (ลองตั้งชื่อ a dataservice)? ตัวอย่างที่ฉันพบตอนนี้ก็คืออันนี้: เรามีรายการคำถามซึ่งมีหนึ่งคำถามขึ้นไป คำถามสามารถมีผลลัพธ์ซึ่งถืออยู่ในตารางแยกต่างหาก ดังนั้นเมื่อคุณต้องการดึงผลลัพธ์รวมของรายการคำถามคุณต้องรวมข้อมูลจากquestionlistตารางตารางคำถามและquestionstatusตาราง ตอนนี้เรามีที่เก็บข้อมูล 3 แห่งสำหรับตารางเหล่านี้ ถ้าฉันจะถามquestionlistrepositoryสิ่งที่เป็นผลรวมสำหรับรายการหมายเลข 12 มันจะต้องได้รับข้อมูลจากสองที่เก็บอื่น ๆ และด้วยเหตุนี้มีตรรกะบางอย่างในนั้นที่ได้รับอนุญาต? หรือมีquestionlistdataserviceที่รู้ที่เก็บที่จะใช้? อีกอย่างหนึ่ง: ที่เก็บข้อมูลของเราสามารถส่งผลIQueryableให้บริการโทรศัพท์สามารถรวมผลลัพธ์ได้อย่างง่ายดาย แต่ถ้าเป็นกรณีนี้ฉันไม่คิดว่ามันเป็นความคิดที่ดีที่จะดึงเนื้อหาทั้งหมดของตารางทั้งสามจาก ฐานข้อมูล

8
คำถามที่เกี่ยวข้องกับการออกแบบ OO ในการสัมภาษณ์ทางเทคนิค [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว เมื่อไม่นานมานี้ฉันได้เข้ารับการสัมภาษณ์ไม่กี่ครั้งและ บริษัท ได้รับการขอให้ตอบคำถาม "ออกแบบ [แบบจำลองการแทรก]" มากกว่าสองสามครั้ง เป็นเรื่องปกติในอุตสาหกรรมทุกวันนี้หรือไม่? ฉันอยู่ในโลกของซอฟต์แวร์มานานกว่าสองทศวรรษแล้วและได้เข้าร่วมการสัมภาษณ์ของฉัน แต่ฉันเห็นรูปแบบนี้ในการสัมภาษณ์เกิดขึ้นเมื่อเร็ว ๆ นี้ ฉันรู้สึกว่าคำถามเปิดกว้างมาก ตัวอย่างเช่นฉันถูกขอให้วาดแผนภาพคลาสเพื่อ "ออกแบบที่จอดรถ" ฉันไม่แน่ใจว่าผู้สัมภาษณ์คาดหวังรายละเอียดระดับใด นี่คือการทดสอบออนไลน์ที่ฉันคาดว่าจะแนบไดอะแกรม visio ดังนั้นฉันไม่สามารถถามพวกเขาว่าความคาดหวังของพวกเขาคืออะไร คุณใช้คำถามแบบนี้ในการสัมภาษณ์หรือไม่? พวกเขาเกี่ยวข้องกับไดอะแกรมของคลาสเท่านั้นหรือคุณยังถามลำดับผังงานและ ERDs (ของหลักสูตรตามลักษณะของตำแหน่ง) พวกเขามีประสิทธิภาพในกระบวนการจ้างงานของคุณหรือไม่ * แก้ไขเพื่อการตอบสนองของ Kevin * ตัวอย่างเช่น: คำถามที่สมบูรณ์อาจเป็น "ออกแบบระบบการจัดการที่จอดรถที่สามารถใช้เพื่อค้นหาช่องว่าง" ฉันสามารถทำได้มี 2 ชั้นParkingLotและSlotหรือฉันจะไปบนเพื่อเพิ่มIVehicleและVehicleและCarและMotorcycleชั้นเรียน ฉันจะวาดเส้นที่ไหน? public class ParkingLot { IVehicle Vehicle {set; get;} List&lt;Slot&gt; …

5
การมีชั้นเรียน 'Util' เป็นสาเหตุของความกังวลหรือไม่ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม &amp; คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา บางครั้งฉันสร้างคลาส 'Util' ซึ่งส่วนใหญ่ใช้เพื่อเก็บวิธีการและค่านิยมที่ไม่ได้อยู่ในที่อื่น แต่ทุกครั้งที่ฉันสร้างหนึ่งในชั้นเรียนเหล่านี้ฉันคิดว่า "เอ่อ - โอ้ฉันจะเสียใจในภายหลัง ... " เพราะฉันอ่านที่ไหนสักแห่งที่มันไม่ดี แต่ในทางกลับกันดูเหมือนจะมีสองกรณี (อย่างน้อยสำหรับฉัน) ที่น่าสนใจสำหรับพวกเขา: ความลับการนำไปใช้งานที่ใช้ในหลายคลาสภายในแพ็กเกจ นำเสนอฟังก์ชั่นที่มีประโยชน์เพื่อเพิ่มคลาสโดยไม่ทำให้หน้าจอของคุณยุ่ง ฉันกำลังจะไปสู่ความพินาศหรือไม่? คุณพูดอะไร !! ฉันควร refactor หรือไม่

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