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

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

3
แนวคิดไม่ตรงกันระหว่าง DDD Application Services และ REST API
ฉันกำลังพยายามออกแบบแอปพลิเคชันที่มีโดเมนธุรกิจที่ซับซ้อนและข้อกำหนดเพื่อสนับสนุน REST API (ไม่ใช่ REST อย่างเคร่งครัด แต่มุ่งเน้นไปที่ทรัพยากร) ฉันมีปัญหาบางอย่างในการหาวิธีเปิดเผยโมเดลโดเมนในลักษณะที่เน้นทรัพยากร ใน DDD ลูกค้าของโมเดลโดเมนจำเป็นต้องผ่านเลเยอร์ 'Application Services' ขั้นตอนเพื่อเข้าถึงฟังก์ชันการทำงานทางธุรกิจใด ๆ ที่ใช้งานโดย Entities และ Domain Services ตัวอย่างเช่นมีแอปพลิเคชันบริการที่มีสองวิธีในการอัปเดตเอนทิตีผู้ใช้: userService.ChangeName(name); userService.ChangeEmail(email); API ของ Application Service นี้แสดงคำสั่ง (คำกริยาขั้นตอน) ไม่ใช่สถานะ แต่ถ้าเราต้องจัดหา RESTful API สำหรับแอปพลิเคชันเดียวกันนั่นก็คือโมเดลทรัพยากรของผู้ใช้ซึ่งมีลักษณะดังนี้: { name:"name", email:"email@mail.com" } API ของทรัพยากรที่มุ่งเน้น exposes รัฐไม่ได้คำสั่ง สิ่งนี้ทำให้เกิดข้อกังวลต่อไปนี้: การดำเนินการอัปเดตแต่ละครั้งกับ REST API สามารถแมปกับการเรียกขั้นตอนบริการแอปพลิเคชันอย่างน้อยหนึ่งรายการขึ้นอยู่กับคุณสมบัติที่จะถูกอัพเดตบนโมเดลรีซอร์ส การดำเนินการอัปเดตแต่ละครั้งจะดูเหมือน atomic ไปยังไคลเอนต์ …

1
URL REST ที่ซ้อนกันและรหัสหลักซึ่งมีการออกแบบที่ดีกว่า
เอาล่ะเรามีสองทรัพยากร: และAlbum Songนี่คือ API: GET,POST /albums GET,POST /albums/:albumId GET,POST /albums/:albumId/songs GET,POST /albums/:albumId/songs/:songId เรารู้ว่าเราเกลียดบางเพลงมันถูกเรียกSusyเช่น เราควรsearchลงมือทำที่ไหน? คำถามอื่น โอเคตอนนี้มันเป็นของจริงมากขึ้น เราเปิดอัลบั้มที่ 1 และโหลดเพลงทั้งหมด เราสร้างวัตถุ JS removeแต่ละเก็บข้อมูลเพลงและมีวิธีการบางอย่างเพื่อให้: update, เพลงวัตถุมี ID ชื่อและสิ่งของ แต่ไม่มีเงื่อนงำเกี่ยวกับผู้ปกครองว่าเป็นของมันเพราะเราดึงรายชื่อเพลงตามการสืบค้นและมันจะไม่ดีที่จะส่งคืนรหัสผู้ปกครองด้วยกัน ฉันผิดหรือเปล่า? ดังนั้นฉันเห็นวิธีแก้ปัญหาเล็กน้อย แต่ฉันไม่แน่ใจจริงๆ ทำให้ id หลักเป็นตัวเลือก - ตามที่ได้รับพารามิเตอร์ ฉันใช้วิธีนี้ในปัจจุบัน แต่ฉันรู้สึกว่ามันน่าเกลียด List,Create /songs?album=albumId Update,Delete /songs/:songId Get /songs/?name=susy # also, solution for first question เป็นลูกผสม …

2
ทุกคนสามารถอธิบายการเป็นตัวแทนของโฟลตในหน่วยความจำได้หรือไม่?
นี่ไม่ใช่คำถามซ้ำซ้อนเมื่อฉันอ่านคำถามก่อนหน้า how float values are stored in the memoryทุกคนสามารถช่วยในการทำความเข้าใจ ข้อสงสัยของฉันอยู่ที่นี่ค่าลอยมี ' .'( for example 3.45) วิธี'.'จะแสดงในหน่วยความจำ? ใครช่วยอธิบายแผนที่ด้วยฉันได้ไหม?

7
Python อาร์กิวเมนต์เริ่มต้นที่ไม่แน่นอน: ทำไม
ฉันรู้ว่าข้อโต้แย้งเริ่มต้นจะถูกสร้างขึ้นในเวลาเริ่มต้นฟังก์ชั่นและไม่ได้ทุกครั้งที่ฟังก์ชั่นที่เรียกว่า ดูรหัสต่อไปนี้: def ook (item, lst=[]): lst.append(item) print 'ook', lst def eek (item, lst=None): if lst is None: lst = [] lst.append(item) print 'eek', lst max = 3 for x in xrange(max): ook(x) for x in xrange(max): eek(x) สิ่งที่ฉันไม่ได้รับคือสาเหตุที่ทำให้เกิดสิ่งนี้ขึ้น พฤติกรรมนี้มีประโยชน์อย่างไรในการเริ่มต้นในแต่ละครั้งที่โทร?
20 python 

7
ความแตกต่างระหว่างรูปแบบและหลักการ
รูปแบบการออกแบบเชิงวัตถุและหลักการต่างกันอย่างไร พวกเขาต่างกันไหม? เท่าที่ฉันเข้าใจพวกเขาทั้งสองพยายามบรรลุเป้าหมายร่วมกัน (เช่นความยืดหยุ่น) ดังนั้นฉันสามารถพูดได้ว่ารูปแบบเป็นหลักการและในทางกลับกัน? หลักการออกแบบ = SOLID (เช่นหลักการผกผันของการพึ่งพา) รูปแบบการออกแบบ = Gof (เช่นรูปแบบนามธรรมของโรงงาน)

9
เทคนิคการเขียนโปรแกรมทั่วไปเพื่อเพิ่มความเร็วในการเขียนโปรแกรม
ฉันกำลังเตรียมสำหรับการประกวดการเขียนโปรแกรมที่เราต้องใช้รหัสใน C ++ และทั้งหมดเกี่ยวกับการสร้างรหัสการทำงานในเวลาอันสั้น ตัวอย่างจะใช้มาโครเพื่อรับค่าต่ำสุดของสอง ints หรือใช้ memsets เพื่อเริ่มต้นอาร์เรย์ (แต่ฉันบอกว่าคุณไม่ควรใช้ทั้งสองที่นี่ ) สิ่งนี้นำไปสู่คำถามเทคนิคการเข้ารหัสแบบใดที่มีอยู่ให้ใช้ในงานจริง
20 c++ 

13
ฉันควรเพิ่มคำนำหน้า“ Abstract” ในคลาสนามธรรมของฉันหรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา Taskสมมติว่าฉันมีระดับนามธรรมชื่อ มีมาตรฐานหรืออนุสัญญาที่แนะนำให้ฉันควรตั้งชื่อAbstractTaskแทนหรือไม่?

5
Multi-tenancy - ฐานข้อมูลเดียวเทียบกับหลายฐานข้อมูล
เรามีลูกค้าจำนวนมากที่มีระบบแบ่งปันฟังก์ชั่นบางอย่าง แต่ก็มีความหลากหลายในระดับหนึ่ง จำนวนลูกค้ากำลังเติบโต - เป็นสิ่งที่ดีต่อสุขภาพเสมอ! - และความหลากหลายระหว่างธุรกิจของพวกเขาก็เพิ่มขึ้นเช่นกัน ในปัจจุบันมีเว็บไซต์ ASP.Net (แบบฟอร์มบนเว็บ) เดียว (ตรงข้ามกับโครงการเว็บ) ซึ่งมีโฟลเดอร์ย่อยสำหรับผู้เช่าแต่ละรายโดยมีหน้าที่ไม่ได้มาตรฐานของผู้เช่ารายนั้น มีโครงการแบบแยกต่างหากซึ่งเกี่ยวข้องกับการเข้าถึงฐานข้อมูลและตรรกะทางธุรกิจ ข้อไหนดีกว่าและที่สำคัญที่สุดคือทำไมระหว่างการมี (a) 1 ฐานข้อมูลต่อลูกค้าโดยมีเฉพาะคุณสมบัติที่เกี่ยวข้องกับไคลเอ็นต์นั้น หรือ (b) ฐานข้อมูลเดียวที่ใช้ร่วมกันโดยไคลเอนต์ทั้งหมดที่มีเพียงส่วนย่อยของตารางที่จะใช้โดยลูกค้ารายใดรายหนึ่ง ความกังวลหลักภายในธุรกิจมีมากกว่า: การบำรุงรักษาสินทรัพย์หลายรายการ - การสำรองข้อมูลการควบคุมเวอร์ชันและสิ่งที่คล้ายกัน ส่งเสริมการใช้ซ้ำให้มากที่สุด คุณจะมั่นใจได้อย่างไรว่าปัญหาเหล่านี้ได้รับการแก้ไขซึ่งเป็นวิธีที่เหมาะสมกว่าและทำไม (ฉันได้รวบรวมคำตอบสำหรับคำถามที่คล้ายกันด้วย)

4
ฉันควรเก็บ False เป็น Null ในฟิลด์ฐานข้อมูลบูลีนหรือไม่
สมมติว่าคุณมีโปรแกรมประยุกต์ที่มีสนามบูลีนในของมันตารางเรียกว่าUserInactive มีอะไรผิดปกติหรือเปล่าที่เพียงแค่เก็บเป็นเท็จเป็นโมฆะ? ถ้าเป็นเช่นนั้นคุณช่วยอธิบายว่าอะไรควรลง? ฉันได้พูดคุยเรื่องนี้กับใครบางคนเมื่อไม่กี่เดือนที่ผ่านมาและเราทั้งคู่เห็นพ้องต้องกันว่ามันไม่สำคัญตราบใดที่คุณทำอย่างสม่ำเสมอตลอดทั้งแอป / ฐานข้อมูล เมื่อเร็ว ๆ นี้บางคนที่ฉันรู้ว่าถูกเน้นว่า "จริง" trueหรือfalseควรจะใช้ แต่พวกเขาไม่ได้ให้คำอธิบายว่าทำไม

2
ปัญหาเกี่ยวกับความเข้าใจคำว่า "ตะเข็บ"
ฉันกำลังอ่าน "การพึ่งพาการฉีดใน. NET" โดย Mark Seemann (มันยอดเยี่ยมและต้องมี) และผู้เขียนมักใช้คำว่า "ตะเข็บ" แต่ฉันไม่เข้าใจความหมาย นี่คือตัวอย่างของการใช้คำนี้: บทที่ 7 อธิบายวิธีการเขียนวัตถุในเฟรมเวิร์กที่หลากหลายเช่น ASP.NET MVC, WPF, WCF และอื่น ๆ ไม่ใช่ทุกเฟรมเวิร์คที่สนับสนุน DI อย่างเท่าเทียมกันและแม้แต่ในบรรดาที่ทำวิธีที่พวกเขาทำแตกต่างกันมาก สำหรับแต่ละเฟรมเวิร์กอาจเป็นการยากที่จะระบุ SEAM ที่เปิดใช้ DI ในเฟรมเวิร์กนั้น อย่างไรก็ตามเมื่อพบว่า SEAM คุณมีทางออกสำหรับแอปพลิเคชันทั้งหมดที่ใช้กรอบงานนี้โดยเฉพาะ ในบทที่ 7 ฉันได้ทำงานนี้สำหรับกรอบงานแอพพลิเคชัน NET ที่ใช้กันทั่วไปมากที่สุดแล้ว คิดว่ามันเป็นแคตตาล็อกของกรอบ SEAMS ฉันจะขอบคุณมากที่ช่วยฉันทำความเข้าใจกับคำนี้

8
ไฟล์เดียวหรือหลายไฟล์สำหรับการทดสอบหน่วยในชั้นเดียว?
ในการวิจัยการทดสอบแนวปฏิบัติที่ดีที่สุดเพื่อช่วยรวบรวมแนวทางสำหรับองค์กรของฉันฉันพบว่ามันดีกว่าหรือมีประโยชน์ในการแยกการทดสอบการทดสอบ (คลาสทดสอบ) หรือเพื่อทำการทดสอบทั้งหมดสำหรับคลาสเดียวในไฟล์เดียว Fwiw ฉันหมายถึง "การทดสอบหน่วย" ในความหมายที่บริสุทธิ์ว่าเป็นการทดสอบในกล่องสีขาวที่กำหนดเป้าหมายไปที่คลาสเดี่ยวหนึ่งการยืนยันต่อการทดสอบหนึ่งการอ้างอิงทั้งหมดที่ล้อเลียนเป็นต้น ตัวอย่างสถานการณ์เป็นคลาส (เรียกว่าเอกสาร) ที่มีสองวิธี: CheckIn และ CheckOut แต่ละวิธีใช้กฎต่าง ๆ ฯลฯ ที่ควบคุมพฤติกรรมของพวกเขา ตามกฎข้อหนึ่งต่อการทดสอบฉันจะมีการทดสอบหลายวิธีสำหรับแต่ละวิธี ฉันสามารถวางทั้งหมดของการทดสอบในครั้งเดียวDocumentTestsระดับที่มีชื่อชอบและCheckInShouldThrowExceptionWhenUserIsUnauthorizedCheckOutShouldThrowExceptionWhenUserIsUnauthorized หรือผมอาจจะมีสองชั้นทดสอบเฉพาะกิจการ: และCheckInShould CheckOutShouldในกรณีนี้ชื่อการทดสอบของฉันจะสั้นลง แต่พวกเขาจะจัดระเบียบเพื่อให้การทดสอบทั้งหมดสำหรับพฤติกรรมที่เฉพาะเจาะจง (วิธีการ) อยู่ด้วยกัน ฉันแน่ใจว่ามีทั้งของมืออาชีพและนักต้มตุ๋นที่จะเข้าใกล้และสงสัยว่าถ้าใครไปเส้นทางด้วยไฟล์หลาย ๆ ไฟล์และถ้าเป็นเช่นนั้นทำไม? หรือถ้าคุณเลือกวิธีการไฟล์เดียวทำไมคุณถึงรู้สึกว่ามันดีกว่า

2
มีใครเคยอ้างสิทธิ์รับประกันในใบรับรอง SSL หรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน8 ปีที่ผ่านมา ใบรับรอง SSL มักจะโฆษณาจำนวนการรับประกันหรือการรับประกันที่แตกต่างกันเช่น $ 500,000 หรือ $ 1m คำถามของฉันคือในประวัติศาสตร์ของ SSL มีใครเคยอ้างสิทธิ์รับประกันอย่างใดอย่างหนึ่งเหล่านี้สำเร็จหรือไม่? เคยมีคดีไหม? ถ้าไม่เป็นธรรมหรือไม่ที่จะถือว่าพวกเขาเป็นเพียงลูกเล่นทางการตลาด

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

4
จะรู้ได้อย่างไรว่าภาพสองภาพเหมือนกันหรือไม่? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันมีรูปภาพมากกว่า 10,000 ภาพซึ่งมีประมาณ 2000 ซ้ำในรูปแบบอื่น (เช่นใน JPEG, PNG, GIF) ตัวเลขทั้งสองนี้เพิ่มขึ้นทุกวัน ฉันต้องการลบรายการที่ซ้ำกันเหล่านั้นและเพื่อที่ฉันจะต้องรู้วิธีค้นหาพวกเขาก่อน ความคิดแรกของฉันคือการตรวจสอบพิกเซลภาพและค้นหารูปภาพอื่นที่มีพิกเซลสีเดียวกันในพิกัดเดียวกัน แต่ตัวเลือกนี้ไม่ได้ผลเสมอไป สมมติว่าฉันค้นหาซ้ำ สำหรับวัตถุที่ค้นหาได้ฉันเลือกไฟล์ PNG 8 บิต มันจะค้นหาภาพที่ซ้ำกันทั้งหมด แต่มีเพียง PNG 8 บิตบางครั้ง 8 บิต GIF และ JPEG น้อยมาก (เพราะอัลกอริทึมภาพที่ฉันคิดว่า?) ความคิดที่สองของฉันคือการทำซ้ำรูปภาพเหล่านั้นทั้งหมดและเปลี่ยนสีใหม่ในจานสีสองสีที่เข้มงวด (สมมติว่าขาวดำ) และทำการสแกนแบบเดียวกันตามที่ระบุข้างต้น ภาพ JPEG อีกครั้งไม่เหมือน 100% กับรูปแบบ PNG หรือ GIF (เหมือนเหตุผลด้านบนใช่หรือไม่) ความคิดที่สามคือการลดอัตราร้อยละของจำนวนภาพที่ต้องทำความคุ้นเคยและเพิ่มจำนวนสีที่สามารถเปลี่ยนแปลงได้ทำให้เกิดการลบภาพที่ไม่ต้องการ …

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

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