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

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

4
ความสัมพันธ์แบบกลุ่มต่อกลุ่มใน microservices
ฉันมีไมโครไซต์สองรายการ เราจะเรียกพวกเขาและAB ฐานข้อมูลภายใต้ microservice Aมีตารางต่อไปนี้: A |-- users ฐานข้อมูลภายใต้ microservice Bมีตารางต่อไปนี้: B |-- trackers ข้อกำหนดระบุว่าusersและtrackersมีความสัมพันธ์แบบกลุ่มต่อกลุ่ม ฉันไม่แน่ใจว่าจะจัดการสิ่งนี้ภายในสถาปัตยกรรม microservices อย่างไร ฉันเห็นการทำงานนี้หนึ่งในสามวิธี: user_trackersตารางจะถูกเพิ่ม AMICROSERVICE นี้ทำหน้าที่คล้ายกับตารางเข้าร่วมประกอบด้วย "คีย์ต่างประเทศ" เพื่อและuserstrackers ownersตารางจะถูกเพิ่ม BMICROSERVICE ตารางนี้ทำหน้าที่คล้ายกับตารางเข้าร่วม polymorphic นี่จะทำให้บริการใด ๆ สร้างการเชื่อมโยงกับตัวติดตาม สิ่งนี้อาจมีลักษณะเช่นนี้: B |-- trackers |-- owners |-- owner_id |-- owner_type |-- tracker_id เก็บบันทึกสำหรับusersและtrackersในแต่ละบริการไมโคร ทำให้พวกเขาซิงค์กับระบบ pubsub บางประเภท เดิมฉันจะไปกับตัวเลือก 2 เพราะฉันชอบที่มันรักษาขอบเขตการทำธุรกรรม …

2
การออกแบบ microservice แบบหลายผู้เช่า
เรากำลังอยู่ในขั้นตอนการโอนย้ายแอพพลิเคชั่นแบบเสาหินไปยังสถาปัตยกรรมไมโครเซอร์วิส เนื่องจากข้อกำหนดทางกฎหมายบางประการเราต้องเก็บข้อมูลลูกค้าจากประเทศต่างๆในฐานข้อมูลแยกต่างหาก (เฉพาะประเทศ) เช่น US db สำหรับลูกค้า US, UK db สำหรับลูกค้า UK ... การออกแบบต่อไปนี้ที่เรากำลังพิจารณามีดังนี้: ตัวเลือกที่ 1: แอปพลิเคชันผู้เช่าหลายคนพร้อมการสนับสนุนผู้เช่าหลายรายที่จำศีลที่สามารถปรับเป็นจำนวน N ครั้งขึ้นอยู่กับความต้องการ (คิดว่าฝัก kubernetes) อินสแตนซ์เดียวของแอปพลิเคชันนี้จะสามารถเชื่อมต่อกับฐานข้อมูลทั้งหมด ตัวเลือก 2: ปรับใช้ 1 อินสแตนซ์ microservice ต่อฐานข้อมูลประเทศ ด้วยเกตเวย์ API ด้านหน้าการกำหนดเส้นทางทราฟฟิก หากคุณต้องออกแบบระบบประเภทนี้ตัวเลือกของคุณจะเป็นอย่างไร

8
สตริง C ถูกยกเลิกเป็นโมฆะเสมอหรือขึ้นอยู่กับแพลตฟอร์มหรือไม่
ตอนนี้ฉันกำลังทำงานกับระบบฝังตัวและหาวิธีที่จะใช้สตริงในไมโครโปรเซสเซอร์ที่ไม่มีระบบปฏิบัติการ จนถึงตอนนี้สิ่งที่ฉันทำคือการใช้ความคิดของการมีตัวชี้ NULL สิ้นสุดตัวอักษรและปฏิบัติต่อพวกเขาเป็นสตริงที่ NULL หมายถึงจุดสิ้นสุด ฉันรู้ว่านี่เป็นเรื่องธรรมดา แต่คุณสามารถเสมอนับเกี่ยวกับเรื่องนี้จะเป็นกรณีที่? เหตุผลที่ฉันถามคือฉันกำลังคิดว่าอาจจะใช้ระบบปฏิบัติการแบบเรียลไทม์ในบางจุดและฉันต้องการใช้รหัสปัจจุบันของฉันให้มากที่สุด ดังนั้นสำหรับตัวเลือกต่าง ๆ ที่อยู่ข้างนอกฉันจะคาดหวังได้ไหมว่าสตริงจะทำงานเหมือนกันหรือไม่? ให้ฉันเจาะจงมากขึ้นสำหรับกรณีของฉัน ฉันกำลังใช้ระบบที่ใช้และประมวลผลคำสั่งผ่านพอร์ตอนุกรม ฉันสามารถรักษารหัสการประมวลผลคำสั่งของฉันไว้เหมือนกันได้หรือไม่แล้วคาดว่าวัตถุสตริงที่สร้างขึ้นบน RTOS (ซึ่งมีคำสั่ง) ทั้งหมดนี้จะถูกยกเลิกเป็น NULL หรือไม่ หรือว่ามันจะแตกต่างกันไปตามระบบปฏิบัติการหรือไม่ ปรับปรุง หลังจากได้รับคำแนะนำให้ดูคำถามนี้ฉันตัดสินใจแล้วว่าไม่ตอบคำถามที่ฉันขอ คำถามก็คือการถามว่าความยาวของสตริงควรส่งผ่านซึ่งแตกต่างอย่างสิ้นเชิงกับสิ่งที่ฉันถามหรือไม่และถึงแม้ว่าคำตอบบางส่วนจะมีข้อมูลที่เป็นประโยชน์ในพวกเขาพวกเขาไม่ใช่สิ่งที่ฉันกำลังมองหา คำตอบที่ดูเหมือนจะให้เหตุผลว่าทำไมหรือทำไมไม่ยุติสตริงด้วยอักขระ null ความแตกต่างกับสิ่งที่ฉันถามคือถ้าฉันสามารถคาดหวังมากขึ้นหรือน้อยลงสตริงที่เกิดในแพลตฟอร์มที่แตกต่างกันเพื่อยุติสตริงของตัวเองด้วย null โดยไม่ต้องออกไปข้างนอกและลองทุกแพลตฟอร์มเดียวถ้ามันสมเหตุสมผล

2
ฉันควรตั้งชื่อฟังก์ชั่นที่คืนค่าใน Python อย่างไร?
ฉันสับสนเกี่ยวกับการเลือกชื่อสำหรับการทำงานของฉันในหลาม บางครั้งหลามในตัวฟังก์ชั่นที่มีความจำเป็นเช่นฟังก์ชั่นและวิธีสตริงprint findบางครั้งพวกเขาไม่ได้เช่นlenชื่อของมันไม่ได้เป็นความจำเป็นเช่นcalculate_lenตัวอย่างและไม่ได้เป็นtypefind_type ฉันสามารถเข้าใจว่าprintคืนค่าที่เราไม่ได้ใช้ (เช่นNone) และทำบางสิ่ง (เช่นมันจะแสดงสตริงบนหน้าจอ) ดังนั้นชื่อของมันจึงมีความจำเป็น แต่lenกลับเป็นค่าที่เราใช้และทำอะไรบางอย่าง (เช่นการคำนวณจำนวนรายการที่มีอยู่ในลำดับหรือการแมป.) และชื่อของมันไม่ได้เป็นความจำเป็น บนมืออื่น ๆ , findวิธีสตริง (เป็นlen) ส่งกลับค่าที่เราใช้และไม่บางสิ่งบางอย่างและชื่อของมันคือความจำเป็น สิ่งที่ทำให้คำถามนี้คือฉันใส่สคริปต์ที่เข้ารหัสและถอดรหัสสตริงโดยใช้ Caesar cipher เพื่อตรวจสอบ ผู้วิจารณ์กล่าวว่า: เป็นเพียงความรู้สึก: ฟังก์ชั่นทำสิ่งต่างๆ ดังนั้นชื่อที่ดีสำหรับการทำงานเป็นความจำเป็น: ฉันต้องการใช้แทนrotate_letterrotated_letter rotated_letterส่งคืนสตริงตัวอักษรเดี่ยวที่แทนตัวอักษรที่หมุนด้วยตัวเลข ผมไม่ทราบว่าสิ่งที่ดีกว่าที่ผมใช้rotated_letterเป็นมันจะกลับค่าเช่นrandintฟังก์ชั่นในโมดูลสุ่มgenerate_randintก็เป็นได้ ดังนั้นในกรณีนี้ฉันจะตั้งชื่อฟังก์ชันที่ส่งกลับค่าที่จะใช้อย่างไร ฉันควรจะให้ชื่อมีความจำเป็นหรือเพียงแค่เป็นรูปธรรม ในกรณีอื่น ๆ จะเห็นได้ชัดว่าจะทำอย่างไรเช่นฟังก์ชั่นบูลีนเช่นis_evenและis_palindromeเราก็ทำให้มันเหมือนคำถามใช่ / ไม่ใช่และฟังก์ชั่นที่เพิ่งทำและคืนค่าที่ไม่ได้ใช้ (เช่นNone), printและวิธีรายการsort.

3
DDD: จะวางตัวจัดการเหตุการณ์ของโดเมนได้ที่ไหน
คุณช่วยบอกความเห็นของคุณว่าเลเยอร์ตัวไหนที่ถูกต้องในการวางตัวจัดการเหตุการณ์ของโดเมนใน DDD ตัวอย่างเช่นฉันมีบริการแอปพลิเคชันเพื่อเพิ่มสัญญาใหม่และฉันต้องการส่งการแจ้งเตือนทางอีเมลไปยังบุคคลที่ติดต่อเมื่อมีการเพิ่มสัญญาดังนั้นผู้ส่งอีเมล (ที่จัดการกับ ContractAdded) แอปพลิเคชันบริการหรือบริการโดเมนหรือ อื่น ๆ อีก?

3
ทำไมคุณต้อง“ ตัวเอง” ใน Python เพื่ออ้างถึงตัวแปรอินสแตนซ์?
ฉันเขียนโปรแกรมเป็นภาษาต่างๆเช่น Java, Ruby, Haskell และ Python ฉันต้องสลับไปมาระหว่างหลายภาษาต่อวันเนื่องจากโครงการที่ฉันทำงานอยู่ ตอนนี้ปัญหาคือฉันมักจะลืมที่จะเขียนselfเป็นพารามิเตอร์แรกในนิยามฟังก์ชั่นใน Python เดียวกันกับวิธีการโทรบนวัตถุเดียวกัน ที่กล่าวว่าฉันค่อนข้างประหลาดใจกับวิธีการของ Python นี้ โดยทั่วไปเราต้องพิมพ์ให้มากขึ้นเพื่อทำสิ่งต่าง ๆ ในภาษาอย่าง Java และ Ruby สิ่งต่าง ๆ ทำได้ง่ายโดยอ้างอิงตัวแปรในวัตถุปัจจุบันโดยอัตโนมัติ คำถามของฉันคือเหตุใดจึงselfจำเป็น มันเป็นตัวเลือกสไตล์อย่างหมดจดหรือมีสาเหตุที่ Python ไม่สามารถให้คุณละเว้นselfวิธีที่ Java และ C ++ ปล่อยให้คุณละเว้นได้this?

2
สัญลักษณ์ไดอะแกรมคลาส UML สำหรับฟังก์ชันระดับบนสุด
ในสัญลักษณ์คลาส UML ฉันจะแสดงถึงฟังก์ชันระดับบนสุดที่ไม่มีคลาสแค็ปซูลหรือโครงสร้างอื่น ๆ ได้อย่างไร เช่นฉันมีฟังก์ชั่นที่ใช้สำหรับดึงข้อมูลจาก URL เนื่องจากมันเป็นฟังก์ชั่น (ในความหมายทางคณิตศาสตร์) ของพารามิเตอร์และสถานะโกลบอลแบบแบ่งใช้เท่านั้นฟังก์ชันจึงไม่ได้อยู่ในคลาส แต่ทิ้งไว้เป็นวิธีระดับบนสุด ถึงแม้ว่าตอนนี้ฉันต้องสร้างไดอะแกรม UML สำหรับโปรแกรมที่ใช้และฉันไม่สามารถหาวิธีแสดงฟังก์ชันระดับบนสุดได้ ฉันจะทำสิ่งนี้ได้อย่างไร
13 uml 

3
องค์ประกอบมากกว่ามรดก แต่
ฉันพยายามสอนตัวเองเกี่ยวกับวิศวกรรมซอฟต์แวร์และการหาข้อมูลที่ขัดแย้งกันซึ่งทำให้ฉันสับสน ฉันได้เรียนรู้เกี่ยวกับ OOP และคลาสนามธรรม / อินเทอร์เฟซคืออะไรและใช้งานอย่างไร แต่จากนั้นฉันก็อ่านว่าควรจะ 'สนับสนุนองค์ประกอบเหนือมรดก' ฉันเข้าใจการจัดองค์ประกอบคือเมื่อคลาสหนึ่งประกอบ / สร้างวัตถุของคลาสอื่นเพื่อใช้ / โต้ตอบกับฟังก์ชันการทำงานของวัตถุใหม่นั้น ดังนั้นคำถามของฉันคือ ... ฉันควรจะไม่ใช้คลาสหรืออินเตอร์เฟสแบบนามธรรมหรือไม่? หากไม่ต้องการสร้างคลาสนามธรรมและขยาย / สืบทอดฟังก์ชันการทำงานของคลาสนามธรรมในคลาสที่เป็นรูปธรรมและแทนที่จะสร้างวัตถุใหม่เพื่อใช้ฟังก์ชันของคลาสอื่น หรือฉันควรใช้องค์ประกอบและสืบทอดจากคลาสนามธรรม; ใช้พวกเขาทั้งสองร่วมกัน? ถ้าเป็นเช่นนั้นคุณช่วยยกตัวอย่างว่ามันจะทำงานอย่างไรและมีประโยชน์อย่างไร เนื่องจากฉันคุ้นเคยกับ PHP มากที่สุดฉันจึงใช้มันเพื่อพัฒนาทักษะ OOP / SE ของฉันก่อนที่จะย้ายไปใช้ภาษาอื่นและถ่ายโอนทักษะ SE ที่เพิ่งได้รับมาดังนั้นตัวอย่างการใช้ PHP จะได้รับการชื่นชมมากที่สุด

2
ทำไมภาษาการเขียนโปรแกรมเริ่มใช้ = สำหรับการมอบหมาย
ในหนังสืออัลกอริทึมส่วนใหญ่<-จะอ้างถึงการมอบหมายและการ=อ้างอิงเพื่อเปรียบเทียบ แต่ในปัจจุบันภาษาเดียวที่ไม่ได้ใช้=สำหรับการกำหนดเป็นปาสกาล ( :=) และของเล่นภาษาเช่นCOOL อะไรทำให้ภาษาการเขียนโปรแกรมสมัยใหม่เปลี่ยนการ=กำหนดความหมายแทนความหมายทางคณิตศาสตร์ของความเท่าเทียมกัน

3
เส้นทางการสั่งซื้อล่วงหน้าเหมือนกับการค้นหาลึกครั้งแรกหรือไม่
ดูเหมือนว่าฉันชอบการสำรวจเส้นทางการสั่งซื้อล่วงหน้าและ DFS เหมือนกันทั้งสองกรณีที่เราสำรวจจากรูทจนถึงสาขาซ้ายและกลับไปที่รูทจากนั้นไปยังสาขาที่ถูกเรียกซ้ำ โปรดแก้ไขให้ฉันได้ไหมถ้าฉันผิด? ขอบคุณล่วงหน้า!

1
รูปแบบ Java regex - ค่าคงที่เวลารวบรวมหรือสมาชิกอินสแตนซ์?
ขณะนี้ฉันมีวัตถุซิงเกิลสองสามตัวที่ฉันจับคู่กับนิพจน์ทั่วไปและคำPatternนิยามของฉันเป็นดังนี้: class Foobar { private final Pattern firstPattern = Pattern.compile("some regex"); private final Pattern secondPattern = Pattern.compile("some other regex"); // more Patterns, etc. private Foobar() {} public static Foobar create() { /* singleton stuff */ } } แต่ผมก็บอกคนในวันอื่น ๆ ที่ว่านี้เป็นรูปแบบที่ไม่ดีและPatternควรเสมอจะกำหนดไว้ในระดับชั้นเรียนและสิ่งที่มีลักษณะเช่นนี้แทน: class Foobar { private static final Pattern FIRST_PATTERN = Pattern.compile("some …

3
การฉีดพึ่งพา: ณ จุดใดฉันได้รับอนุญาตให้สร้างวัตถุใหม่
ฉันกำลังปรับโครงสร้างแอปพลิเคชันPHPอีกครั้งและฉันพยายามทำให้มีการพึ่งพาการฉีด (DI) มากที่สุดเท่าที่จะทำได้ ฉันรู้สึกว่าฉันเข้าใจดีว่ามันทำงานอย่างไรและฉันสามารถเห็นชั้นเรียนของฉันกลายเป็นคนผอมเพรียวและแข็งแกร่งขึ้น ฉัน refactoring เพื่อให้ฉันสามารถฉีดการพึ่งพามากกว่าการสร้างวัตถุใหม่ภายในชั้นเรียน แต่ในบางจุดฉันจะต้องสร้างวัตถุบางอย่างนั่นคือใช้newคำหลักที่หวั่น ปัญหาที่ฉันพบตอนนี้คือจุดใดที่ฉันสามารถสร้างวัตถุใหม่ได้จริง? ดูเหมือนว่าฉันจะลงเอยที่ชั้นบนสุดสร้างวัตถุใหม่มากมายเพราะไม่มีที่ไหนให้ไป สิ่งนี้รู้สึกผิด ฉันได้อ่านบล็อกบางอย่างที่ใช้คลาสของโรงงานเพื่อสร้างออบเจ็กต์ทั้งหมดจากนั้นคุณฉีดโรงงานลงในคลาสอื่น จากนั้นคุณสามารถเรียกวิธีการจากโรงงานและโรงงานจะสร้างวัตถุใหม่ให้คุณ ความกังวลของฉันเกี่ยวกับการทำเช่นนี้คือตอนนี้ชั้นเรียนโรงงานของฉันกำลังจะเป็นแบบnewฟรีสำหรับทุกคน! ฉันเดาว่ามันอาจจะโอเคเนื่องจากคลาสของโรงงาน แต่มีกฎบางอย่างที่ต้องยึดติดเมื่อใช้รูปแบบจากโรงงานและ DI หรือฉันจะปิดเครื่องหมายที่นี่หรือไม่

4
ใช้เลเยอร์บริการด้วย MVC
หากคอนโทรลเลอร์มีไขมันมากเกินไปและการสร้างอินสแตนซ์ของโมเดลเริ่มเพิ่มขึ้นสามารถใช้เลเยอร์บริการได้ ถ้าฉันแค่ห่อตรรกะภายในคลาสบริการฉันจะได้รับบริการมากมายด้วยวิธีการหนึ่ง / สอง รู้สึกเหมือนมีกลิ่นรหัส มีแนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับเรื่องนี้หรือไม่? บริการยกตัวอย่างแบบจำลองได้หรือไม่? หากบริการทำให้โมเดลเป็นตัวอย่างแสดงว่าไม่สามารถทดสอบบริการได้ พวกเขาสามารถถูกครอบคลุมโดยการทดสอบการรวม?
13 mvc  services 

5
วิธีจัดทำเอกสารโครงการที่พัฒนาไปแล้ว
ฉันต้องการทราบว่ามีตัวเลือกใดบ้างสำหรับการจัดทำเอกสารโครงการที่ได้รับการพัฒนาแล้วเนื่องจากผู้พัฒนาที่ทำงานบนไม่ได้เขียนเอกสารแม้แต่หน้าเดียว โครงการนี้ไม่มีรายละเอียดอื่นใดนอกจากหน้าของสคริปต์ที่มีหน้าที่เขียนและแก้ไขโดยนักพัฒนาที่ทำงานในโครงการนี้ในช่วง 2 ปีที่ผ่านมา สิ่งที่ฉันมีก็คือสคีมาฐานข้อมูลและไฟล์โครงการ ฉันต้องการทราบว่ามีวิธีใดที่จะจัดระเบียบโครงการนี้และจัดทำเอกสารเพื่อที่จะเป็นประโยชน์สำหรับนักพัฒนาที่จะทำงานกับโครงการนี้ในอนาคต โครงการได้รับการพัฒนาด้วย PHP และ MySQL ฟังก์ชั่นนั้นมีความคิดเห็นไม่ดีดังนั้นฉันจึงไม่สามารถรับผลลัพธ์ที่ดีได้เมื่อฉันเรียกใช้ด้วย doxygen

2
วัตถุการเปิดใช้งานใน JavaScript คืออะไร?
ในบริบทการดำเนินการที่กำหนดวัตถุตัวแปรเป็นวัตถุการเปิดใช้งานของบริบทการดำเนินการนั้น จากการวิจัยออนไลน์ของฉันฉันสามารถค้นหาประโยคก่อนหน้านี้ที่ใช้ถ้อยคำใหม่ในวิธีที่ต่างกัน แต่ไม่มีใครสามารถบอกได้ว่ามันคืออะไร วัตถุการเปิดใช้งานคืออะไร

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