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

การออกแบบระดับสูงและคำอธิบายของระบบซอฟต์แวร์ การออกแบบสถาปัตยกรรมกลั่นรายละเอียดของการใช้งานอัลกอริทึมและการแสดงข้อมูลเพื่อมุ่งเน้นการโต้ตอบของส่วนประกอบ "กล่องดำ"

5
ต่อสู้กับหนี้ทางเทคนิคในฐานะ“ ผู้พัฒนาที่ต่ำที่สุด” หรือไม่?
สมมติว่าคุณทำงานให้กับ บริษัท และสิ่งที่คุณทำคือการพัฒนาซอฟต์แวร์สำหรับพวกเขา คุณไม่มีความคิดในภาพรวมหรืออาจจะเล็กน้อย สิ่งที่คุณมีคืองานที่มอบหมายให้คุณผ่านระบบติดตามปัญหา คุณได้รับงานคุณทำให้งานเป็นไปตามที่งานอธิบายคุณส่งงานกลับมา ชอบเพิ่ม 2 จำนวนเต็ม: function add(a,b){return a + b;} แต่ต่อมาเมื่อโครงการดำเนินไปข้างหน้าคุณจะสังเกตเห็นว่าในขณะที่addมีความซับซ้อนมากขึ้นคุณรู้ว่ามันควรจะต้องมีรูปแบบของสถาปัตยกรรมมากกว่าฟังก์ชั่นที่เพิ่มพารามิเตอร์และส่งกลับค่า อย่างไรก็ตามคุณไม่ทราบว่า addในสถานที่แรกทั้งหมดที่พวกเขาต้องการก็คือง่ายๆที่ คุณไม่ได้คาดหวังว่าการเพิ่มจะซับซ้อนนัก โครงการดำเนินไปด้วยคุณสมบัติที่มากขึ้นซึ่งคุณไม่ได้คาดหวังไว้ตั้งแต่แรก และในที่สุดคุณก็เก็บซ้อนแฮ็คและเลเยอร์ตามเลเยอร์ของฟังก์ชั่นเพื่อหลีกเลี่ยงการทำลาย / เขียนรหัสที่มีอยู่ใหม่ คุณรับมือกับสถานการณ์เหล่านี้อย่างไร? คุณต่อสู้กับหนี้ทางเทคนิคในฐานะ "ผู้พัฒนาที่ต่ำที่สุด" ได้อย่างไร? ชี้แจง: คุณคือ "implementer" ซึ่งต่ำที่สุดในลำดับชั้น คุณเห็นปัญหา แต่ไม่ได้พูดกับเรื่องนี้ ฉันไม่ได้ระบุปริมาณหนี้ทางเทคนิคหรือมองหาเครื่องมือ เกี่ยวกับ"ซ้ำ" ที่สาม การ Refactoring & Rewrite - คุณถูกล็อคในงานของคุณ คุณไม่ได้รับค่าตอบแทนในการทำสิ่งพิเศษ ภาพรวมสถาปัตยกรรม - คุณรู้ระบบโดยรวม แต่ไม่มีแนวคิดเกี่ยวกับสถาปัตยกรรม Code Freeze - ไม่ใช่การโทรของคุณ …

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

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

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 ไปยังไคลเอนต์ …

4
ทำไมไม่ใช้ SQL แทน GraphQL
เมื่อเร็ว ๆ นี้ฉันได้เรียนรู้เกี่ยวกับ GraphQL ซึ่งอ้างว่าเหนือกว่า RESTful อย่างไรก็ตามฉันเริ่มสงสัยว่าทำไมเราไม่ใส่คำสั่ง SQL ลงในคำขอ HTTP GET ตัวอย่างเช่นใน GraphQL ฉันจะเขียน { Movie(id: "cixos5gtq0ogi0126tvekxo27") { id title actors { name } } } ซึ่งไม่ง่ายกว่า SQL แบบเดียวกัน SELECT id, title FROM movies WHERE id = cixos5gtq0ogi0126tvekxo27; SELECT actors.name FROM actors, actors_movies WHERE actors.id == movies.actor_id AND movie.id == …

6
ฉันควรจัดระเบียบโฟลเดอร์ตามโดเมนธุรกิจหรือโดเมนทางเทคนิคหรือไม่
ตัวอย่างเช่นถ้าฉันใช้สถาปัตยกรรมที่คล้ายกับ MVC ฉันควรใช้โครงสร้างโฟลเดอร์ใด: domain1/ controller model view domain2/ controller model view หรือ: controllers/ domain1 domain2 models/ domain1 domain2 views/ domain1 domain2 ฉันจงใจละทิ้งนามสกุลไฟล์เพื่อรักษาคำถามผู้ไม่เชื่อเรื่องภาษานี้ โดยส่วนตัวฉันต้องการแยกจากโดเมนธุรกิจ (ความรู้สึก gut) แต่ฉันเห็นว่ากรอบการทำงานส่วนใหญ่ / หลายแยกจากโดเมนทางเทคนิค ทำไมฉันถึงต้องเลือกอันใดอันหนึ่ง?

2
ฉันจะแยกส่วนติดต่อผู้ใช้ออกจากตรรกะทางธุรกิจในขณะที่ยังคงรักษาประสิทธิภาพได้อย่างไร
สมมติว่าฉันต้องการที่จะแสดงรูปแบบที่แสดงถึง 10 วัตถุที่แตกต่างกันใน combobox ตัวอย่างเช่นฉันต้องการให้ผู้ใช้เลือกหนึ่งแฮมเบอร์เกอร์จาก 10 เมนูที่มีมะเขือเทศ เนื่องจากฉันต้องการแยก UI และตรรกะฉันจะต้องผ่านแบบฟอร์มการเป็นตัวแทนสตริงของแฮมเบอร์เกอร์เพื่อแสดงบน Combobox มิฉะนั้น UI จะต้องขุดลงในช่องวัตถุ จากนั้นผู้ใช้จะเลือกแฮมเบอร์เกอร์จากคอมโบบ็อกซ์แล้วส่งกลับไปที่คอนโทรลเลอร์ ตอนนี้ผู้ควบคุมจะต้องหาแฮมเบอร์เกอร์อีกครั้งโดยอ้างอิงจากการแทนค่าสตริงที่ใช้โดยแบบฟอร์ม (อาจเป็น ID?) มันไม่มีประสิทธิภาพอย่างไม่น่าเชื่อใช่หรือไม่? คุณมีวัตถุที่คุณต้องการเลือกแล้ว หากคุณส่งแบบฟอร์มไปยังวัตถุทั้งหมดแล้วส่งคืนวัตถุเฉพาะคุณจะไม่ต้อง refind อีกครั้งในภายหลังเนื่องจากแบบฟอร์มส่งคืนการอ้างอิงไปยังวัตถุนั้นแล้ว ยิ่งกว่านั้นถ้าฉันผิดและคุณควรส่งวัตถุทั้งหมดไปยังแบบฟอร์มฉันจะแยก UI ออกจากตรรกะได้อย่างไร

4
การติดตาเป็นภาษาที่ใช้งานได้จริงเพียงใด?
รูปแบบของการใช้ตัวจัดการคำสั่งในการจัดการกับการคงอยู่ของภาษาที่ใช้งานได้อย่างแท้จริงซึ่งเราต้องการทำให้โค้ดที่เกี่ยวข้องกับ IO มีความบางที่สุด เมื่อใช้การออกแบบที่ขับเคลื่อนด้วยโดเมนในภาษาเชิงวัตถุเป็นเรื่องปกติที่จะใช้รูปแบบคำสั่ง / ตัวจัดการเพื่อดำเนินการเปลี่ยนแปลงสถานะ ในการออกแบบตัวจัดการคำสั่งจะอยู่ด้านบนของวัตถุโดเมนของคุณและรับผิดชอบต่อตรรกะที่เกี่ยวข้องกับการคงอยู่ที่น่าเบื่อเช่นการใช้ที่เก็บข้อมูลและการเผยแพร่กิจกรรมโดเมน ตัวจัดการเป็นหน้าสาธารณะของโมเดลโดเมนของคุณ รหัสแอปพลิเคชันเช่น UI เรียกตัวจัดการเมื่อจำเป็นต้องเปลี่ยนสถานะของวัตถุโดเมน ร่างใน C #: public class DiscardDraftDocumentCommandHandler : CommandHandler<DiscardDraftDocument> { IDraftDocumentRepository _repo; IEventPublisher _publisher; public DiscardDraftCommandHandler(IDraftDocumentRepository repo, IEventPublisher publisher) { _repo = repo; _publisher = publisher; } public override void Handle(DiscardDraftDocument command) { var document = _repo.Get(command.DocumentId); document.Discard(command.UserId); _publisher.Publish(document.NewEvents); } …

4
เหตุใด PHP จึงไม่สามารถรองรับ Unicode ได้อย่างสมบูรณ์
ทุกคนรู้ว่า PHP มีปัญหากับ Unicode เวอร์ชัน 6 ถูกยกเลิกอย่างมีประสิทธิภาพเนื่องจากความยุ่งยากในการใช้ Unicode แต่ฉันสงสัยว่าใครรู้เหตุผลที่แน่นอนคืออะไร? ปัญหาด้านสถาปัตยกรรม / การออกแบบความกังวลเรื่องประสิทธิภาพปัญหาชุมชน (ฉันไม่เดิมพัน) มีอะไรอื่นอีกหรือ

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

3
วิธีจัดการกับข้อ จำกัด กุญแจต่างประเทศเมื่อทำการย้ายจากก้อนหินใหญ่ไปเป็นไมโครเซอร์วิซ?
ทีมของฉันกำลังย้ายจากแอปพลิเคชัน ASP.NET แบบเสาหินไปยัง. NET Core และ Kubernetes การเปลี่ยนแปลงรหัสดูเหมือนจะเป็นไปตามคาด แต่ทีมของฉันกำลังเผชิญกับความไม่ลงรอยกันอยู่รอบฐานข้อมูล ขณะนี้เรามีฐานข้อมูล SQL Server ค่อนข้างใหญ่ที่รวบรวมข้อมูลทั้งหมดสำหรับธุรกิจทั้งหมดของเรา ฉันเสนอให้เราแยกฐานข้อมูลในลักษณะที่คล้ายคลึงกับการแยกรหัส - ข้อมูลแคตตาล็อกในฐานข้อมูลหนึ่ง (ตรรกะ) ข้อมูลสินค้าคงคลังในอีกคำสั่งซื้อในอื่นและอื่น ๆ - และแต่ละ microservice จะเป็นผู้ดูแลฐานข้อมูลของมัน . ความหมายที่นี่คือกุญแจต่างประเทศที่ข้ามขอบเขตการให้บริการจะต้องถูกลบออก แบบจำลองข้อมูลทั้งหมดอาจหรือไม่อาจอยู่ในฐานข้อมูลทางกายภาพเดียวกัน แต่แม้ว่าพวกเขาทำแบบนั้นพวกเขาไม่ควรโต้ตอบกันโดยตรง คำสั่งซื้ออาจยังคงอ้างอิงรายการแคตตาล็อกโดย Id แต่ความสมบูรณ์ของข้อมูลจะไม่ถูกบังคับใช้อย่างเคร่งครัดในระดับฐานข้อมูลและข้อมูลนั้นจะต้องเข้าร่วมในรหัสมากกว่าใน SQL ฉันเห็นการสูญเสียสิ่งเหล่านี้เมื่อมีการแลกเปลี่ยนที่จำเป็นเมื่อต้องย้ายไปที่ไมโครเซอร์วิสและรับผลประโยชน์ที่ปรับขนาดได้ที่มาพร้อมกับ ตราบใดที่เราเลือกตะเข็บของเราอย่างชาญฉลาดและพัฒนาไปรอบ ๆ มันก็น่าจะดี สมาชิกในทีมคนอื่น ๆ ยืนกรานว่าทุกอย่างจะต้องอยู่ในฐานข้อมูลเสาหินเดียวกันดังนั้นทุกอย่างสามารถเป็นกรดและรักษาความสมบูรณ์ของการอ้างอิงได้ทุกที่ สิ่งนี้นำมาสู่คำถามของฉัน ก่อนอื่นท่าทางของฉันเกี่ยวกับข้อ จำกัด ของคีย์ต่างประเทศและเข้าร่วมเป็นไปได้หรือไม่ ถ้าเป็นเช่นนั้นมีใครรู้บ้างเกี่ยวกับวัสดุการอ่านที่น่าเชื่อถือที่ฉันสามารถเสนอให้เพื่อนร่วมงานของฉันได้หรือไม่? ตำแหน่งของพวกเขาเกือบจะเป็นศาสนาและพวกเขาดูเหมือนว่าพวกเขาจะถูกครอบงำด้วยอะไรก็ตามที่สั้น ๆ ของ Martin Fowler เขาบอกพวกเขาว่าพวกเขาผิด

2
การเขียนแอป Angular 2 ขนาดใหญ่พร้อมแอปขนาดเล็กหลายรายการ
หลังจากการอภิปรายและการวิจัยนาน 3 เดือนในการเลือกระหว่าง React (กับ Redux) และ Angular 2 ทีม front-end ใน บริษัท ของฉันได้สรุปว่าจะไปกับ Angular 2 (เนื่องจากมันเหมาะสมกับปัญหาของเรามากขึ้น) เราเข้าสู่ธุรกิจแอพระดับองค์กรซึ่งปัจจุบันประกอบด้วยเทคโนโลยี Front-End ที่แตกต่างกันมากมาย (ในขณะที่มีแบ็กเอนด์ RESTful ทั้งหมด) และเราต้องการแทนที่ทั้งหมดและมีเทคโนโลยีเดียวที่จะทำให้การฝึกอบรมและการควบคุมคุณภาพในอนาคตง่ายขึ้น ด้วยลักษณะของผลิตภัณฑ์ของเรามันมีมากมายและมีโมดูลอยู่ภายในซึ่งอยู่ในโดเมนอื่นและสามารถทำเป็นแอพแบบสแตนด์อโลนได้ แต่ตัวผลิตภัณฑ์นั้นใช้ URL เดียว ตัวอย่าง; เรียกผลิตภัณฑ์ของฉันเป็น SuperApp ในฐานะที่เป็น UI นั้น SuperApp มีระบบเข้าสู่ระบบมาตรฐานและการนำทางไปยังโมดูลย่อย / ผลิตภัณฑ์ย่อยเช่นเวิร์กโฟลว์ปรากฏดังต่อไปนี้ SuperApp ตรวจสอบผู้ใช้ ลืมรหัสผ่านของวิซาร์ด เข้าถึงหน้าสาธารณะโดยไม่ต้องตรวจสอบสิทธิ์ ผู้ใช้รับรองความถูกต้อง ระบบนำทาง บ้าน Sub-Product1 Sub-Product2 Sub-Product3 ข้อมูลส่วนตัว ... …

5
การมีฟังก์ชั่นใน DB เป็น Roadblock ต่อการขยายขีดความสามารถหรือไม่?
ฉันอาจไม่สามารถให้ชื่อที่ถูกต้องกับคำถาม แต่นี่มันคือ เรากำลังพัฒนาพอร์ทัลการเงินสำหรับการบริหารความมั่งคั่ง เราคาดว่าจะมีลูกค้ามากกว่า 10,000 รายที่จะใช้แอปพลิเคชันนี้ พอร์ทัลจะคำนวณการวิเคราะห์ประสิทธิภาพที่หลากหลายตามการวิเคราะห์ทางเทคนิคของตลาดหุ้น เราพัฒนาฟังก์ชันการทำงานจำนวนมากผ่านขั้นตอนการจัดเก็บฟังก์ชันที่ผู้ใช้กำหนดเองทริกเกอร์ ฯลฯ ผ่านฐานข้อมูล เราคิดว่าเราสามารถเพิ่มประสิทธิภาพอย่างมากในการทำสิ่งต่างๆโดยตรงในฐานข้อมูลมากกว่าผ่านรหัส C # และเราได้รับการเพิ่มประสิทธิภาพอย่างมาก เมื่อฉันพยายามคุยโวเกี่ยวกับความสำเร็จของ CTO ของเราเขาตอบโต้การตัดสินใจของฉันในการใช้งานฟังก์ชันในฐานข้อมูลแทนที่จะใช้รหัส ตามที่เขาใช้งานดังกล่าวประสบปัญหาการขยายขีดความสามารถ ในคำพูดของเขา "ทุกวันนี้สิ่งต่าง ๆ ถูกเก็บไว้ในหน่วยความจำ / แคชข้อมูลที่จัดเป็นกลุ่มนั้นยากที่จะจัดการได้ตลอดเวลา Facebook, Google ไม่มีอะไรในฐานข้อมูลมันเป็นยุคของเซิร์ฟเวอร์ที่บางและไคลเอนต์หนาฐานข้อมูลใช้เพื่อเก็บข้อมูลธรรมดาเท่านั้น และฟังก์ชั่นควรแยกออกจากฐานข้อมูลอย่างสมบูรณ์ " พวกคุณช่วยแนะนำฉันหน่อยได้ไหมว่าเขาพูดถูกไหม จะไปเกี่ยวกับสถาปนิกแอปพลิเคชันเช่นนี้ได้อย่างไร?

2
ความสัมพันธ์ระหว่างพื้นที่เก็บข้อมูลกับหน่วยงาน
ฉันจะใช้พื้นที่เก็บข้อมูลและฉันต้องการใช้รูปแบบ UOW เนื่องจากผู้บริโภคของที่เก็บสามารถดำเนินการหลายอย่างและฉันต้องการที่จะยอมรับพวกเขาในครั้งเดียว หลังจากอ่านบทความต่าง ๆ เกี่ยวกับเรื่องนี้แล้วฉันยังไม่เข้าใจวิธีการเชื่อมโยงองค์ประกอบทั้งสองนี้ขึ้นอยู่กับบทความที่กำลังทำในลักษณะอื่น ๆ บางครั้ง UOW เป็นสิ่งที่อยู่ภายในที่เก็บ: public class Repository { UnitOfWork _uow; public Repository() { _uow = IoC.Get<UnitOfWork>(); } public void Save(Entity e) { _uow.Track(e); } public void SubmittChanges() { SaveInStorage(_uow.GetChanges()); } } และบางครั้งก็เป็นภายนอก: public class Repository { public void Save(Entity e, UnitOfWork uow) { uow.Track(e); …

4
ฉีดพึ่งพาและ Singleton พวกเขาทั้งสองแนวคิดที่แตกต่างกันอย่างสิ้นเชิง?
ฉันเคยได้ยินเกี่ยวกับการใช้การฉีดขึ้นเหนือ Singleton สำหรับเพื่อนร่วมงานของฉัน ฉันยังไม่สามารถบอกได้ว่ามันเป็นสองรูปแบบมุมฉากซึ่งสามารถแทนที่ด้วยอีกรูปแบบหนึ่งได้หรือไม่? หรือ DI เป็นวิธีที่ทำให้รูปแบบซิงเกิลทดสอบได้หรือไม่? โปรดดูข้อมูลโค้ดต่อไปนี้ IMathFace obj = Singleton.Instance; SingletonConsumer singConsumer = new SingletonConsumer(obj); singConsumer.ConsumerAdd(10,20); ยอมรับพารามิเตอร์ของชนิดSingletonConsumer IMathFaceแทนที่จะเข้าถึงคลาส singleton ภายในSingletonConsumerจะได้รับอินสแตนซ์ singleton ที่ส่งโดยผู้เรียก นี่เป็นตัวอย่างที่ดีของการบริโภคคลาสซิงเกิลผ่านการฉีดแบบพึ่งพาหรือไม่

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