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

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

4
วิธีกำหนดขอบเขตของบริบทที่มีขอบเขตอย่างชัดเจน
หลังจากอ่านและค้นคว้า DDD มาหนึ่งเดือนฉันตัดสินใจเริ่มโครงการของตัวเองและสร้าง DDD ด้วยบริบทที่ล้อมรอบเหล่านี้> ลูกค้า ผลิตภัณฑ์ สั่งซื้อ การเรียกเก็บเงิน แต่ละบริบทที่ถูกล้อมรอบมี API ส่วนที่เหลือเป็นเลเยอร์การนำเสนอเลเยอร์โดเมนชั้นถาวร จนถึงตอนนี้โค้ดก็ทำงานได้อย่างราบรื่น แต่มาจากโลกใบใหญ่ที่ฉันยังคงพยายามหาข้อมูลต่อไปนี้: เมื่อฉันต้องการสร้างลูกค้าใหม่ออกใบแจ้งหนี้ใหม่สร้างคำสั่งซื้อใหม่ที่ฉันต้องการตัวอย่างเช่นรายการการเข้าถึงของประเทศ ฉัน: ก) สร้างรายชื่อประเทศในแต่ละปีก่อนคริสต์ศักราช b) สร้างประเทศ BC -> API และใช้เพื่อรับรายชื่อประเทศที่มี c) ใช้ API ของบุคคลที่สามและดึงข้อมูลผ่านเลเยอร์ anticoruption ในแต่ละ BC เมื่อรวมเข้ากับ API ของบุคคลที่สามโดยใช้เลเยอร์ต่อต้านการคอร์รัปชั่นหรือเลเยอร์อะแดปเตอร์จะต้องมีข้อมูลใดบ้างในโมเดลโดเมนของฉัน ตัวอย่างเช่นถ้าฉันต้องการรวม zendesk API กับ Client BC ฉันต้องการเพียง ticketID ในโดเมนของฉันหรือฉันต้องดึงข้อมูลทั้งหมดจาก Zendesk ที่ฉันต้องการเข้าถึงและใช้งานใน Client BC หรือไม่ หากแอป MVC …

1
การสร้างแบบจำลองตารางการทำงานที่ซับซ้อน
ฉันมีปัญหาในโลกแห่งความจริงที่ฉันพยายามเป็นตัวแทนและเป็นอัตโนมัติ ฉันทำให้มันง่ายขึ้นและเป็นนามธรรมลงไปต่อไปนี้: มีที่ทำงาน n แห่ง (P1, P2, ... , Pn) แต่ละแห่ง Pn มีรหัส Kn มีคนงาน m, (W1, W2, ... , Wm) ในการทำงานที่ Pn คนงานจะต้องถือ Kn แต่ละคีย์สามารถเก็บไว้โดยคนงานหรือปล่อยไว้ที่ Exchange, E ผู้ปฏิบัติงานสามารถเดินทางไปที่ Exchange ได้ตลอดเวลาเพื่อรับกุญแจที่ไม่มีการอ้างสิทธิ์หรือส่งกุญแจเพื่อให้ผู้อื่นใช้ ขณะนี้มีตารางงานภายนอกที่ต้องทำให้เสร็จในลำดับที่เข้มงวด ตัวอย่างเช่น: 2016-04-21 W1 ต้องทำงานที่ P6 2016-04-21 W2 ต้องทำงานที่ P3 ต้องแลกเปลี่ยนกุญแจ ** 2016-04-22 W3 ต้องทำงานที่ P3 2016-04-22 W2 ต้องทำงานที่ …

5
ทำไมไม่อนุญาตให้มีการบรรทุกมากเกินไปกับประเภทการคืนสินค้า (อย่างน้อยก็ในภาษาที่ใช้โดยทั่วไป)
ฉันไม่รู้เกี่ยวกับภาษาการเขียนโปรแกรมทั้งหมด แต่เป็นที่ชัดเจนว่าโดยปกติแล้วความเป็นไปได้ของการโอเวอร์โหลดวิธีที่พิจารณาประเภทการส่งคืน (สมมติว่าอาร์กิวเมนต์เป็นจำนวนและประเภทเดียวกัน) ไม่ได้รับการสนับสนุน ฉันหมายถึงสิ่งนี้: int method1 (int num) { } long method1 (int num) { } ไม่ใช่ว่ามันเป็นปัญหาใหญ่สำหรับการเขียนโปรแกรม แต่บางครั้งฉันก็ยินดีต้อนรับ เห็นได้ชัดว่าไม่มีทางที่ภาษาเหล่านั้นจะสามารถสนับสนุนได้โดยไม่มีวิธีแยกความแตกต่างของวิธีการที่เรียกว่า แต่ไวยากรณ์สำหรับสิ่งนั้นอาจจะง่ายเหมือนอย่าง [int] method1 (num) หรือ [long] method1 (num) วิธีนั้นคอมไพเลอร์จะรู้ว่าจะเป็นอันไหนที่จะถูกเรียก ฉันไม่รู้ว่าคอมไพเลอร์ทำงานอย่างไร แต่มันก็ดูไม่ยากที่จะทำดังนั้นฉันจึงสงสัยว่าทำไมบางสิ่งเช่นนั้นถึงไม่ได้รับการปรับแต่ง อะไรคือสาเหตุที่ทำให้บางอย่างเช่นนั้นไม่รองรับ

2
อัลกอริทึมการบีบอัดที่ดีที่สุดสำหรับภาพถ่ายตามเวลาที่กำหนด
ฉันมีโฟลเดอร์ที่มีภาพถ่าย JPEG ประมาณ 9,000 ภาพ (ประมาณ 30Gb) ซึ่งฉันต้องการเก็บถาวรด้วยการบีบอัดบางประเภท ฉันเข้าใจว่าการบีบอัด JPEG นั้นปกติแล้วจะไม่ได้ผลมากนัก แต่ภาพถ่ายเหล่านี้เป็นเฟรมของเวลาที่กำหนดดังนั้นจึงมีความธรรมดาสามัญจำนวนมากระหว่างภาพส่วนใหญ่ ฉันมีแนวโน้มที่จะลดขนาดไฟล์มากกว่าปกติในกรณีนี้หรือไม่? มีอัลกอริทึมการบีบอัด (ธรรมดา) ที่น่าจะทำได้ดีในสถานการณ์นี้หรือไม่

4
Microservices และ shared library
เรากำลังออกแบบระบบโดยใช้ไมโครไซต์อิสระ (เชื่อมต่อผ่านบัส RabbitMq) รหัสจะ (สำหรับส่วนประกอบแรกอย่างน้อย) เขียนเป็น python (ทั้ง python2 และ python3) เรามีแอปพลิเคชั่นก้อนเดียวที่ใช้ตรรกะทางธุรกิจบางอย่างซึ่งเราต้องการ refactor เป็น microservices และขยาย คำถามหนึ่งที่ทำให้ฉันกังวลก็คือ: เป็นวิธีที่ดีที่สุดในการแบ่งปันรหัสระหว่างไมโครไซต์ต่างๆ เรามีฟังก์ชั่นผู้ช่วยทั่วไป (การประมวลผลข้อมูลการบันทึกการแยกวิเคราะห์การกำหนดค่า ฯลฯ ) ซึ่งจะต้องใช้โดยไมโครไซต์หลายรายการ Microservices จะพัฒนาเป็นโครงการแยกต่างหาก (git repositories) ห้องสมุดทั่วไปสามารถพัฒนาเป็นโครงการที่มีในตัวเองได้เช่นกัน ฉันจะแชร์ไลบรารีเหล่านี้ระหว่างไมโครไซต์ได้อย่างไร ฉันเห็นหลายวิธี: คัดลอกเวอร์ชันของไลบรารีที่จำเป็นสำหรับแต่ละ microservice และอัพเดตตามต้องการ ปล่อยไลบรารีทั่วไปไปยัง PyPi ภายในและแสดงรายการไลบรารีเหล่านั้นเป็นการอ้างอิงในข้อกำหนดของ microservice รวมที่เก็บไลบรารีเป็น submodule git ฉันต้องการอ่านเพิ่มเติมเกี่ยวกับแนวทางที่แนะนำวิธีปฏิบัติที่ดีที่สุดประสบการณ์ที่ผ่านมาก่อนที่จะตัดสินใจเลือกวิธีดำเนินการ คุณมีข้อเสนอแนะหรือลิงค์หรือไม่?

2
หลังจากแบ่งรหัสของเราเป็นบิตที่ใช้ซ้ำได้เราจะทดสอบและปรับใช้อย่างไร
เราเริ่มต้นจากนักพัฒนาหนึ่งรายและ repo svn หนึ่งตัวมีรหัสของเราทั้งหมด: ^/foo/trunk/module-a ^/foo/trunk/module-b ^/foo/trunk/module-b/submodule-b1 ^/foo/trunk/website1 (ในเวลานี้เป็นการปรับปรุงครั้งใหญ่) หลังจากนี้มีโอกาสเติบโตขึ้นเล็กน้อยเราเริ่มมีปัญหากับการพึ่งพาแบบวนรอบการทดสอบช้าและปัญหาทั่วไปในการใช้รหัสอีกครั้ง (เนื่องจากชุดคุณลักษณะของเว็บไซต์ 1 มีอยู่ในโมดูลทั่วไป) ต้องการทำให้โมดูลโค้ดเป็นโมดูลและคาดว่าเราจะย้ายไปที่คอมไพล์ในไม่ช้า (และเมื่ออ่านที่คอมไพล์ไม่ชอบ svn mega-repos) เราได้เปลี่ยนไปใช้โครงสร้างที่ละเอียดยิ่งขึ้น: ^/module-a/trunk/ ^/module-b/trunk/ ^/module-b/trunk/sumbmodule-b1 ^/earlier-sub-sub-sub-module-c/trunk etc. (about 120 such modules) นี่เป็นแนวคิดที่ยอดเยี่ยม รหัสแบบแยกส่วนเพิ่มเติมชุดทดสอบที่เร็วกว่ามากง่ายต่อเอกสารและอื่น ๆ เราเปิดแหล่งที่มาของส่วนประกอบทั่วไปเพิ่มเติมและทำให้โมดูลทั้งหมดสามารถติดตั้งได้ (ใช้pip install -e .เพื่อติดตั้งในdevelopmentvirtualenv) เราสร้าง^/srv/trunkพื้นที่เก็บข้อมูลที่มีโครงสร้างโฟลเดอร์ของสภาพแวดล้อมรันไทม์เช่น ^/srv/trunk/libสำหรับโมดูล/srv/trunk/srcสำหรับซากของ^/foo/trunk, ^/srv/trunk/wwwเว็บไซต์ ฯลฯ และสุดท้าย (รับความคิดจากผู้ที่ฉันเคยทำงานมานานแล้ว [ https://www.perforce.com/perforce/r12.1/manuals/cmdref/client.html] ) เราได้สร้าง "vcs-" ดึง "ไฟล์ข้อความที่แสดงรายการ repos ที่เกี่ยวข้องทั้งหมดและสถานที่ที่ควรเช็คเอาท์ในสภาพแวดล้อม …

2
คำเตือนใน REST API ไม่ใช่ข้อผิดพลาดร้ายแรง
ฉันมี REST API สำหรับ entpoinds บางตัวเช่น DELETE, POST หรือ PUT ฉันมีกฎการตรวจสอบที่สามารถส่งคืนข้อผิดพลาดได้ ตอนนี้ฉันต้องการข้อผิดพลาดชนิดใหม่เช่นข้อผิดพลาดที่ไม่ร้ายแรงว่าควรล้มเหลวในลักษณะปกติ แต่ควรดำเนินการหากมีการส่งแฟล็ก "supress warnings" ผู้ใช้ดังกล่าวสามารถถาม: "คุณแน่ใจหรือว่าต้องการเปลี่ยนสถานะนี้คุณยังไม่เสร็จ" คำถาม : มีวิธีปฏิบัติที่ดีที่สุดสำหรับข้อผิดพลาดประเภทนี้หรือไม่? คำถามรอง : มี HTTP semantic ใด ๆ สำหรับพฤติกรรมที่ฉันสามารถใช้หรือไม่ ฉันจะยังคงทำตามแนวคิด REST (สำหรับฉันแล้วดูเหมือนว่าฉันจะทำ) - ฉันเก็บมันไว้ไร้สัญชาติ
9 rest  api 

3
การเพิ่มลิงก์ภายนอกในเอกสารประกอบเป็นเรื่องที่ผิดหรือไม่?
บ่อยครั้งที่ฉันพบว่าตัวเองกำลังแก้ไขข้อบกพร่องด้วยการหาคำตอบใน Stack Overflow มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ที่จะเพิ่มตัวอย่างของสาเหตุที่ฉันทำในสิ่งที่ฉันทำและเพิ่มลิงค์ไปยังบทความหรือหน้าเว็บจากเว็บ

3
พื้นที่เก็บข้อมูลจำเป็นต้องใช้อีกต่อไปใน ASP.net 5 และ EF7 หรือไม่
ฉันโพสต์คำถามเกี่ยวกับ GitHub ให้กับทีม EF ฉันได้รับคำตอบว่าจะเป็นการดีกว่าถ้าถามคำถามนี้ที่นี่ดังนั้นฉันจะคัดลอกและวางไว้ที่นี่เนื่องจากเราเป็นลิงก์เพื่อให้คนอื่นเห็นการตอบกลับใน GitHub ไม่กี่ครั้ง คำถาม: ฉันกำลังทำการวิจัยและมีคนชี้ให้เห็นว่า Line 24 ของ DBContext Class กล่าว DbContext เป็นการรวมกันของรูปแบบของหน่วยงานและที่เก็บข้อมูล นี่หมายความว่าเราไม่จำเป็นต้องแยก EF ออกจากพื้นที่เก็บข้อมูลแล้วใช้และส่วนต่อประสานเพื่อแทรกเข้าไปในคอนโทรลเลอร์ โพสต์ต้นฉบับบน Github: https://github.com/aspnet/EntityFramework/issues/4899 เหตุผลที่ฉันถามนี่คือฉันดูเหมือนจะเข้าไปในจุดที่ฉันเพิ่มวิธีการมากมายในพื้นที่เก็บข้อมูลเช่น GetById, GetByName, GetWithIncludesABC, GetWithIncludes123 ฯลฯ และดูเหมือนจะทำให้ repo สกปรกในใจ

2
เหตุใดจึงไม่ จำกัด คลาสย่อยของ Enum ใน Haskell
ดูเหมือนว่าอินสแตนซ์ที่ถูกผูกมัดใด ๆ ควรมีการนำ Enum ไปปฏิบัติอย่างมีสติ ฉันไม่สามารถคิดตัวอย่างแบบส่วนตัวได้แม้ว่าจะมีบางคนที่มากับคนที่ไม่ใช่พยาธิวิทยาฉันก็จะเข้าใจว่าทำไมมันถึงไม่เป็นเช่นนั้น จากการทำ:iสองประเภทของคลาสดูเหมือนว่าข้อยกเว้นเพียงอย่างเดียวในปัจจุบันในไลบรารีมาตรฐานคือสำหรับสิ่งอันดับซึ่งถูกผูกไว้ แต่ไม่ใช่ Enums อย่างไรก็ตาม tuple ที่ถูกผูกไว้ใด ๆ จะต้องนับจำนวนด้วยวิธีการที่มีสติด้วยการเพิ่มองค์ประกอบสุดท้ายจากนั้นล้อมรอบเมื่อมันไปถึง maxBound การเปลี่ยนแปลงนี้อาจเกี่ยวข้องกับการเพิ่มpredBและ / nextBหรือสิ่งที่คล้ายกันเพื่อ จำกัด สำหรับวิธีที่ปลอดภัย / วนรอบเพื่อสำรวจผ่านค่า Enum ในกรณีนี้toEnum 0 :: (...)จะเท่ากับ(toEnum 0, toEnum 0, ...) :: (...)

2
รูปแบบของผู้สังเกตการณ์มีความเหมาะสมหรือไม่เมื่อผู้สังเกตการณ์ไม่เป็นอิสระต่อกัน?
ฉันมีclass Carซึ่งมี 2 คุณสมบัติ: และint price boolean inStockนอกจากนี้ยังถือเป็นListของabstract class State(ชั้นว่าง) มี 2 รัฐซึ่งสามารถนำมาใช้ในรถและแต่ละคนจะแสดงโดยระดับของตัวเอง: และclass Upgrade extends Stateclass Shipping extends State A Carสามารถเก็บหมายเลขใด ๆ ของแต่ละสถานะ 2 รัฐมีกฎต่อไปนี้: Upgrade: เพิ่ม1ราคาสำหรับแต่ละรัฐที่ใช้กับรถยนต์หลังจากนั้น Shippingถ้ามีอย่างน้อย 1 Shippingของรัฐในรายการแล้วมีการตั้งค่าinStockfalse ตัวอย่างเช่นเริ่มต้นด้วยprice = 1และinStock = true: add Shipping s1 --> price: 1, inStock: false add Upgrade g1 --> price: 1, …

8
การต่อรองและเอาชนะความพยายามในการประมาณค่าการแย่งชิงส่วนที่ถูกต้องของกระบวนการหรือไม่
ฉันสังเกตเห็นในการประชุมทะเลาะกันว่านักพัฒนามักจะให้การประเมินที่สมจริงเกี่ยวกับเรื่องราว อย่างไรก็ตามเรื่องราวที่ค่อนข้างเรียบง่ายนั้นต้องใช้ความพยายามอย่างมากในการกำหนดค่าการตั้งค่าส่วนประกอบของบุคคลที่สามการทดสอบและการสร้างขั้นสุดท้ายและระบบได้สะสมหนี้สินทางเทคนิคบางส่วนดังนั้นการประมาณการมักจะปรากฏสูงเกินไปสำหรับเจ้าของผลิตภัณฑ์หรือการจัดการ PO มักจะเอาชนะประมาณการเช่น: "คุณต้องการอะไร 13 เรื่อง [4 วัน] สำหรับเรื่องนี้ไม่เป็น! ฉันไม่สามารถอธิบายสิ่งนี้กับฝ่ายบริหารได้ ด้วย 3 SP [ใน 4 ชั่วโมง]! " เป็นผลให้นักพัฒนาได้รับแขนของพวกเขาบิดที่จะมอบให้กับประมาณ 5 หรือ 8 เรื่องราว [1.5 ถึง 2 วัน] ประมาณการ (การต่อสู้แย่งชิงยังคงเป็นภาระผูกพันไม่ได้เป็นเพียงการคาดการณ์) แน่นอนว่าหากไม่มีแผนใด ๆ ที่จะตัดความคาดหวัง (ส่วนใหญ่เกี่ยวกับการทดสอบและคุณภาพ) การวิ่งเหล่านี้มักล้มเหลว การประเมินของนักพัฒนาซอฟต์แวร์นั้นเป็นสิ่งที่จริงซื่อตรงและเอาชนะการคาดการณ์ไม่ได้ทำให้งานที่แท้จริงต้องทำ หนึ่งสามารถพูดว่า: "คุณไม่ควรมุ่งมั่นที่เป็นไปไม่ได้เพียงเพราะใครบางคนผลักดันให้คุณทำ!" แต่ในความคิดของฉันงานของนักพัฒนาคือการออกแบบและเขียนโปรแกรมซอฟต์แวร์ไม่ใช่การต่อรองหรือยืนหยัดต่อสู้กับความกดดัน! อาจมีแจ็คของการซื้อขายทั้งหมดโดยทั่วไปผู้ที่ติดต่อโดยตรงกับลูกค้าภายนอก แต่นี่ไม่ใช่นักพัฒนาสำนักงานส่วนใหญ่! สำหรับฉันแล้วการฝึกนี้ทำให้โปรแกรมเมอร์ดูเหมือนกระตุกทำให้เกิดความล้มเหลวในการวิ่งอย่างต่อเนื่องและป้องกันการประมาณค่าจริงรวมทั้งมองหาการปรับปรุงที่เกิดขึ้นจริง แนวทางการแย่งชิงกันพูดในหัวข้อนี้หรือพวกเขาพูดอะไรเกี่ยวกับมัน? แก้ไข:แทนที่เวลาด้วยคะแนนเรื่องราว ฉันอ้างถึงขั้นตอนการประมาณค่าเริ่มต้นด้วยการวางแผนโป๊กเกอร์และคะแนนเรื่องราวไม่ใช่การวางแผนรายละเอียดงาน ฉันแค่ใส่วัน / ชั่วโมงเพราะมันเป็นบทสนทนาทั่วไปเช่นนี้บางครั้งก็มีเวลาแทนที่จะเป็นคะแนน ขออภัยในความสับสนใด ๆ ! …

3
สามารถฉีดได้กี่ครั้งในหนึ่งชั้นเมื่อใช้การฉีดแบบพึ่งพา
ฉันใช้ Unity ใน C # สำหรับการฉีดพึ่งพา แต่คำถามควรใช้กับภาษาและกรอบงานใด ๆ ที่ใช้การฉีดพึ่งพา ฉันพยายามทำตามหลักการ SOLID ดังนั้นฉันจึงมี abstractions มากมาย แต่ตอนนี้ฉันสงสัยว่ามีวิธีปฏิบัติที่ดีที่สุดในการฉีดหนึ่งชั้นควรจะฉีดเท่าไหร่? ตัวอย่างเช่นฉันมีพื้นที่เก็บข้อมูลที่มีการฉีด 9 ครั้ง สิ่งนี้จะยากที่จะอ่านสำหรับผู้พัฒนารายอื่นหรือไม่? การฉีดมีความรับผิดชอบดังต่อไปนี้: IDbContextFactory - สร้างบริบทสำหรับฐานข้อมูล IMapper - การแมปจากเอนทิตีกับโมเดลโดเมน IClock - บทคัดย่อ DateTime ตอนนี้จะช่วยในการทดสอบหน่วย IPerformanceFactory - วัดเวลาดำเนินการสำหรับวิธีการเฉพาะ ILog - Log4net สำหรับการบันทึก ICollectionWrapperFactory - สร้างคอลเลกชัน (ที่ขยาย IEnumerable) IQueryFilterFactory - สร้างเคียวรีตามอินพุตที่จะเคียวรี db IIdentityHelper - ดึงผู้ใช้ที่เข้าสู่ระบบ …

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

1
ควรใช้คุณลักษณะใดเมื่อเทียบกับการสืบทอดและองค์ประกอบ
AFAIK มีสามวิธีทั่วไปในการนำความสามารถในการนำมาใช้ใหม่มาใช้กับ OOP มรดก: มักจะเป็นตัวแทนของ - ความสัมพันธ์ (เป็นเป็ด - นก) ส่วนประกอบ: โดยปกติแล้วจะเป็นตัวแทนของความสัมพันธ์แบบมี (รถยนต์มีเครื่องยนต์) ลักษณะ (เช่นคำสำคัญของคุณลักษณะใน PHP): ... ไม่แน่ใจเกี่ยวกับสิ่งนี้จริงๆ ในขณะที่ฉันรู้สึกว่าลักษณะสามารถใช้ทั้งความสัมพันธ์แบบ a และ a - a แต่ฉันไม่แน่ใจจริง ๆ ว่าแบบจำลองนั้นมีไว้สำหรับอะไร ลักษณะของสถานการณ์แบบใดที่ออกแบบมาเพื่อ?

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