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

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

2
ส่วนหน้าเขียนด้วยภาษาที่ใช้สำหรับแบ็กเอนด์! [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา จากประสบการณ์ของฉันในการพัฒนาเว็บไซต์ฉันรู้ว่ามีการใช้ภาษาอย่าง PHP, Java, Python..etc สำหรับการพัฒนาแบ็กเอนด์ (ซอฟต์แวร์ที่ทำงานบนเซิร์ฟเวอร์) และสำหรับภาษาส่วนหน้าใช้ JS / HTML / CSS แต่ฉันเห็นหลาย บริษัท บอกว่าพวกเขาใช้เช่น PHP สำหรับการพัฒนาส่วนหน้าและไพ ธ อนสำหรับแบ็คเอนด์ นั่นหมายความว่า PHP เป็นส่วนหน้าสำหรับการเรียกบริการอื่น ๆ ที่เขียนเป็นภาษาอื่น ๆ ผ่าน REST, RPC .. เป็นต้น?

2
ฉันควรแคชข้อมูลหรือกดฐานข้อมูลหรือไม่
ฉันไม่ได้ทำงานกับกลไกการแคชใด ๆ และสงสัยว่าตัวเลือกของฉันคืออะไรในโลก. net สำหรับสถานการณ์ต่อไปนี้ โดยทั่วไปเรามีบริการ REST ซึ่งผู้ใช้ผ่าน ID ของหมวดหมู่ (think folder) และหมวดหมู่นี้อาจมีหมวดหมู่ย่อยมากมายและแต่ละหมวดย่อยอาจมี 1,000 คอนเทนเนอร์สื่อ (คิดว่าวัตถุอ้างอิงไฟล์) ซึ่งมีข้อมูลเกี่ยวกับ ไฟล์ที่อาจอยู่บนเซิร์ฟเวอร์ NAS หรือ SAN (ไฟล์เป็นวิดีโอในกรณีนี้) ความสัมพันธ์ระหว่างหมวดหมู่เหล่านี้ถูกเก็บไว้ในฐานข้อมูลพร้อมกับกฎการอนุญาตและข้อมูลเมตาเกี่ยวกับหมวดย่อย ดังนั้นจากมุมมอง UI เรามีตัวควบคุมทรีโหลดที่ขี้เกียจซึ่งขับเคลื่อนโดยผู้ใช้โดยคลิกที่โฟลเดอร์ย่อยแต่ละโฟลเดอร์ (คิดว่าเป็น Windows explorer) เมื่อพวกเขามาที่ URL ของไฟล์วิดีโอพวกเขาจะสามารถดูวิดีโอได้ จำนวนผู้ใช้สามารถเติบโตเป็น 1000 และหมวดหมู่ย่อยและวิดีโออาจอยู่ในช่วง 10,000 เมื่อระบบเติบโต คำถามคือเราควรดำเนินการตามที่มันทำงานอยู่ในขณะที่แต่ละคำขอกระทบฐานข้อมูลหรือเราควรคิดถึงการแคชข้อมูลหรือไม่ เรากำลังใช้ IIS 6/7 และ Asp.net

2
รูปแบบพื้นที่เก็บข้อมูลกับการสร้างวัตถุ DAL
เท่าที่ผมได้เรียนรู้ที่ควรมีIRepository CRUDจากนั้นเราจะสืบทอดสิ่งนี้IRepositoryในอินเทอร์เฟซอื่นของเราที่ชอบIProductและใช้IProductคลาสที่เป็นรูปธรรมProductRepositoryด้วยวิธีการเช่นGetAllProducts(), Top5Products(). เราสามารถทำเช่นเดียวกันกับสถาปัตยกรรมระดับ n เช่นการสร้างDAL Class Libraryและในนั้นกำหนดชั้นเรียนProductด้วยวิธีการเช่น,GetAllProducts()Top5Products() ทั้งในDAL.ProductและRepo.ProductRepositoryชั้นเรียนที่เราเริ่มต้นDB ContextของEntity Frameworkและสอบถามข้อมูลที่เกี่ยวข้องของเรา การโทรคล้ายกันทั้งในRepo.ProductRepositoryหรือDAL.ProductจากวิธีการBLL ในมุมมองของความคล้ายคลึงกันเหล่านี้คำถามของฉัน Repos มีประโยชน์อย่างไร? ฉันสามารถทำเช่นเดียวกันกับความสะดวกมากโดยใช้สถาปัตยกรรม n ชั้นด้วย ( Controller, BLL Class Library, DAL Class Library)

5
Microservices: หินใหญ่ก้อนแรก?
ฉันค้นคว้าสถาปัตยกรรมไมโครเซอร์วิสที่พยายามรับภาพรวมในระดับสูงถึงข้อดีและข้อเสียทั้งหมดและข้อมูล ฯลฯ ข้อมูลมากมายที่ฉันอ่าน / ดูมาจาก ThoughtWorks (Martin Fowler, Neal Ford, et อัล) งานส่วนใหญ่ของมาร์ตินฟาวเลอร์ในเรื่องนี้มีอายุเพียงไม่กี่ปีเมื่อ Microservices (เป็นชื่อครัวเรือนในการเขียนโปรแกรมหากไม่ใช่ในทางปฏิบัติทั่วไป) ยังเด็กอยู่ดังนั้นฉันจึงใช้เกลือเม็ดเล็ก ๆ สิ่งหนึ่งที่พิเศษคือ: เมื่อฉันได้ยินเรื่องราวเกี่ยวกับทีมที่ใช้สถาปัตยกรรมไมโครไซต์ฉันสังเกตเห็นรูปแบบทั่วไป เรื่องราวของบริการไมโครสโคปที่ประสบความสำเร็จเกือบทั้งหมดเริ่มต้นด้วยก้อนหินขนาดใหญ่ที่ใหญ่เกินไปและพังทลาย เกือบทุกกรณีที่ฉันได้ยินเกี่ยวกับระบบที่สร้างขึ้นเป็นระบบไมโครบริการตั้งแต่เริ่มต้นมันก็จบลงด้วยปัญหาร้ายแรง รูปแบบนี้ทำให้เพื่อนร่วมงานของฉันหลายคนโต้แย้งว่าคุณไม่ควรเริ่มโครงการใหม่ด้วยบริการไมโครเซสชั่นแม้ว่าคุณจะแน่ใจว่าใบสมัครของคุณจะใหญ่พอที่จะทำให้คุ้มค่า . (อ้างอิง: https://martinfowler.com/bliki/MonolithFirst.html - เน้นพวกเขา) ตอนนี้ 3 ปีต่อมาและด้วย microservices คำที่แพร่หลายมากขึ้นมันเป็นที่ยอมรับกันโดยทั่วไปว่าระบบใหม่มักจะให้บริการที่ดีขึ้นโดยมีบริการที่ใหญ่กว่า (-than-microservice มันละเอียดยิ่งขึ้นซึ่งเป็นส่วนหนึ่งของมาตรการวิวัฒนาการใช่หรือไม่ หรือมีบรรทัดฐานในการเริ่มต้นโครงการตั้งแต่เริ่มต้นด้วยสถาปัตยกรรมไมโครบริการแบบตรงข้ามกับข้อความข้างต้นหรือไม่? ดูเหมือนว่าวิธีการทั่วไปมีเหตุผล แต่อยากรู้อยากเห็นความคิดของชุมชน

2
ฉันควรใช้เลเยอร์ระหว่างบริการและพื้นที่เก็บข้อมูลสำหรับสถาปัตยกรรมสะอาด - สปริง
ฉันกำลังทำงานในสถาปัตยกรรมมันจะให้ api ที่เหลือสำหรับเว็บไคลเอ็นต์และแอพมือถือ ฉันกำลังใช้สปริง (สปริง mvc, สปริงข้อมูล jpa, ... ฯลฯ ) รูปแบบโดเมนนั้นมีรหัสด้วย JPA ฉันพยายามที่จะใช้แนวคิดบางอย่างของสถาปัตยกรรมที่สะอาด ( https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html ) ไม่ใช่ทั้งหมดเพราะฉันจะคงรูปแบบโดเมน jpa ไว้ การไหลที่แท้จริงผ่านเลเยอร์คือ: ส่วนหน้า <--> บริการ API -> บริการ -> พื้นที่เก็บข้อมูล -> ฐานข้อมูล ส่วนหน้า : เว็บไคลเอ็นต์แอปมือถือ บริการ API : Rest Controllers ที่นี่ฉันใช้ตัวแปลงและ dto's และบริการโทร บริการ : การเชื่อมต่อกับการใช้งานและมีตรรกะทางธุรกิจ พื้นที่เก็บข้อมูล : ส่วนต่อประสานที่เก็บข้อมูลที่มีการใช้งานโดยอัตโนมัติ (ทำโดย data …

3
ในสถาปัตยกรรม microservices ที่เชื่อมโยงกันอย่างหลวม ๆ คุณจะติดตามการพึ่งพาของคุณได้อย่างไร
ตัวเลือกสถาปัตยกรรมระดับสูงที่ได้รับความนิยมในโปรแกรมที่ทันสมัยคือระบบ microservices ที่ใช้ REST สิ่งนี้มีข้อดีหลายประการเช่นข้อต่อหลวมการใช้งานง่าย จำกัด ข้อ จำกัด เกี่ยวกับเทคโนโลยีที่สามารถใช้ได้ความยืดหยุ่นสูงเป็นต้น แต่ปัญหาอย่างหนึ่งที่ฉันเห็นในสถาปัตยกรรมนั้นก็คือการมองเห็นที่ไม่ดีเกี่ยวกับการพึ่งพาของแอปพลิเคชัน ตัวอย่างเช่นสมมติว่าฉันมีแอปพลิเคชันที่ใช้การเรียกใช้ REST หนึ่งชุดเป็นประจำทุกวัน แอปพลิเคชั่นนี้ใช้การเรียกใช้ REST ชุดที่สอง แต่เพียงไตรมาสละครั้ง ถ้าฉันจะสแกนบันทึกสำหรับสัปดาห์ที่ผ่านมาฉันจะเห็น cals ทุกวัน แต่ฉันคงไม่เห็นการโทรรายไตรมาส เมื่อถึงเวลาต้องปรับโครงสร้างการโทรรายไตรมาสมีความเสี่ยงสูงที่จะแตกหัก รูปแบบหรือเครื่องมือใดที่สามารถนำมาใช้เพื่อลดความเสี่ยงนี้และให้ทัศนวิสัยที่ดีขึ้นในการพึ่งพาของสถาปัตยกรรมคู่ที่หลวม

1
ในรูปแบบ MVP ควรดูตัวอย่างวัตถุต้นแบบตามเนื้อหา UI หรือเพียงแค่ส่งเนื้อหาเหล่านี้เป็นพารามิเตอร์ไปยังผู้นำเสนอ
ฉันใช้รูปแบบ MVP ในแอพ android ที่ฉันกำลังพัฒนา ฉันมีองค์ประกอบ 4 อย่าง: AddUserView ที่สามารถเพิ่มผู้ใช้ใหม่: AddUserPresenter The UserInfo (the pojo) UserInfoManager (ตรรกะ businness และผู้จัดการหน่วยเก็บข้อมูล) คำถามของฉันคือ: เมื่อฉันกดปุ่ม "เพิ่ม" ใน AddUserView มันควรจะได้รับเนื้อหาของ textviews ยกตัวอย่าง UserInfo ใหม่และส่งต่อไปยัง Presenter หรือ AddUserView ควรรับเนื้อหา textViews และส่งไปยัง AddUserPresenter ซึ่งอันที่จริงแล้วจะยกตัวอย่าง UserInfo และส่งต่อไปยัง UserInfoManager

1
การจัดหากิจกรรมเฉพาะเมื่อการเขียนเป็นของหายากหรือไม่
ฉันกำลังอ่านข้อมูลเกี่ยวกับการจัดหางานและไม่สามารถหยุดถามตัวเองได้ว่ามันสมเหตุสมผลในสถานการณ์ที่แปลกใหม่ซึ่งการเขียนนั้นยากมากหรือต้องมีการตรวจสอบเกรดทางทหาร ระบบที่ไม่ธรรมดาซึ่งมีการใช้งานที่สำคัญอาจสร้างระหว่างการเขียนหลายร้อยถึงหลายพันครั้งต่อวันการแปลการพูดการเขียนหนึ่งล้านหรือ 2 ครั้ง (เช่นเหตุการณ์) ต่อปีของการทำงาน การรวมวัตถุหลายล้านรายการ (เหตุการณ์) เพียงเพื่อให้ได้สถานะปัจจุบันเหมือนข้อเสนอที่น่าหัวเราะเมื่อเทียบกับการอ่านแบบตรงขึ้นจากที่จัดเก็บแบบดั้งเดิม แต่การจัดหากิจกรรมอยู่เบื้องหลังระบบที่มีประสิทธิภาพมากที่สุด (คิดว่า LMAX) แล้วฉันจะพลาดอะไร การกู้คืนสถานะจากสตรีมเหตุการณ์ทำได้ปกติหรือไม่ หรือเป็นความคิดที่จะต้องทำเช่นนี้และใช้หน่วยเก็บข้อมูลที่แตกต่างกันโดยสิ้นเชิงสำหรับการดำเนินงานปกติ (เช่นใช้หน่วยเก็บข้อมูล Query จาก CQRS) และเรียกคืนจากเหตุการณ์เฉพาะในกรณีพิเศษ (เช่นการจำลองแบบการตรวจสอบ ฯลฯ )

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

3
REST จำกัด เฉพาะการควบคุมภาวะพร้อมกันในแง่ดีหรือไม่?
บริบท เนื่องจากความไร้สัญชาติของรูปแบบสถาปัตยกรรม REST ที่เกี่ยวข้องกับการร้องขอแต่ละรายการนั้นล้วน แต่อยู่คนเดียวเซิร์ฟเวอร์ชั้นนำที่จะไม่เก็บข้อมูลใด ๆ เกี่ยวกับลูกค้า ดังนั้นการควบคุมภาวะพร้อมกันในแง่ร้ายไม่เหมาะสมเพราะจะต้องมีการจัดเก็บเซิร์ฟเวอร์ที่ลูกค้าจะได้รับการล็อคทรัพยากร การควบคุมภาวะพร้อมกันในแง่ดีนั้นจะถูกนำมาใช้ด้วยความช่วยเหลือของEtagส่วนหัว (btw ตามที่ฉันถาม/programming/30080634/concurrency-in-a-rest-api ) ปัญหา ปัญหาหลักที่เกิดขึ้นกับกลไกการควบคุมภาวะพร้อมกันในแง่ดีคือคุณอนุญาตให้ลูกค้าทุกคนทำการดำเนินการใด ๆ ได้ตลอดเวลา และฉันต้องการหลีกเลี่ยงสิ่งนั้นโดยไม่ทำลายหลักการไร้สัญชาติของ REST ฉันหมายความว่าลูกค้าทั้งหมดไม่สามารถดำเนินการใด ๆ ได้ตลอดเวลา คำถาม ในใจของฉันมันเป็นไปได้ด้วยกลไกการควบคุมภาวะพร้อมกันแบบกึ่งมองโลกในแง่ดีเช่นนั้น: ลูกค้าสามารถขอโทเค็น สามารถสร้างโทเค็นเดียวเท่านั้นและมีระยะเวลาที่ จำกัด หากต้องการดำเนินการกับทรัพยากร (เช่นPOSTหรือPUT ) ไคลเอ็นต์จะต้องให้โทเค็นนี้เป็นส่วนหนึ่งของเนื้อความ (หรือส่วนหัว?) ของคำขอ ลูกค้าที่ไม่มีโทเค็นไม่สามารถทำการดำเนินการเหล่านี้ได้ มันคล้ายกันมากกับการควบคุมภาวะพร้อมกันในแง่ดียกเว้นว่ามีลูกค้าเพียงรายเดียวเท่านั้นที่สามารถทำการดำเนินการบางอย่าง (ลูกค้าที่ได้รับโทเค็น) ... ตรงข้ามกับ "ลูกค้าทุกคนสามารถดำเนินการทั้งหมดได้" กลไกนี้เข้ากันได้กับสไตล์สถาปัตยกรรม REST หรือไม่? มันทำลายข้อ จำกัด ใด ๆ หรือไม่? ฉันคิดว่าจะถาม SO แต่ดูเหมือนว่าจะเป็นคำถามระดับสูงที่เกี่ยวข้องกับการออกแบบซอฟต์แวร์

4
ฉันจะให้วัตถุโต้ตอบและสื่อสารกันโดยไม่บังคับลำดับชั้นได้อย่างไร
ฉันหวังว่าการพูดจาโผงผางเหล่านี้จะทำให้คำถามของฉันชัดเจน - ฉันเข้าใจโดยสิ้นเชิงถ้าพวกเขาไม่ได้ดังนั้นแจ้งให้เราทราบว่าเป็นกรณีนี้และฉันจะพยายามทำให้ตัวเองชัดเจนขึ้น พบกับBoxPongเกมง่ายๆที่ฉันสร้างความคุ้นเคยกับการพัฒนาเกมเชิงวัตถุ ลากกล่องเพื่อควบคุมลูกบอลและรวบรวมสิ่งที่เป็นสีเหลือง การทำให้ BoxPong ช่วยฉันกำหนดคำถามพื้นฐาน: ฉันจะมีวัตถุที่มีปฏิสัมพันธ์ซึ่งกันและกันโดยไม่ต้อง "เป็น" กันได้อย่างไร กล่าวอีกนัยหนึ่งมีวิธีที่วัตถุจะไม่เป็นลำดับชั้น แต่แทนที่จะอยู่ร่วมกันหรือไม่ (ฉันจะเข้าไปดูรายละเอียดเพิ่มเติมด้านล่าง) ฉันสงสัยว่าปัญหาของวัตถุที่อยู่ร่วมกันนั้นเป็นปัญหาทั่วไปดังนั้นฉันหวังว่าจะมีวิธีการแก้ไขที่แน่นอน ฉันไม่ต้องการที่จะสร้างใหม่ล้อสี่เหลี่ยมดังนั้นฉันเดาคำตอบที่ดีที่สุดที่ฉันกำลังมองหาคือ "นี่เป็นรูปแบบการออกแบบที่ใช้กันทั่วไปในการแก้ปัญหาของคุณ" โดยเฉพาะอย่างยิ่งในเกมง่ายๆเช่น BoxPong เป็นที่ชัดเจนว่ามีหรือควรมีวัตถุจำนวนหนึ่งอยู่ร่วมกันในระดับเดียวกัน มีกล่องมีลูกบอลมีของสะสม ทั้งหมดที่ฉันสามารถแสดงในภาษาเชิงวัตถุแม้ว่า - หรือเพื่อให้ดูเหมือน - มีความสัมพันธ์HAS-A ที่เข้มงวด ทำผ่านตัวแปรสมาชิก ฉันไม่สามารถเริ่มballและปล่อยให้มันทำสิ่งนั้นฉันต้องการให้มันเป็นของวัตถุอื่นอย่างถาวร ฉันได้ตั้งค่าเพื่อให้วัตถุหลักของเกมมีกล่องและกล่องนั้นมีลูกบอลและมีตัวนับคะแนน แต่ละวัตถุยังมีupdate()วิธีการซึ่งจะคำนวณตำแหน่งทิศทาง ฯลฯ และฉันไปลักษณะที่คล้ายกันที่นั่นผมเรียกวิธีการอัพเดตเกมวัตถุหลักซึ่งเรียกวิธีการปรับปรุงของเด็กทุกคนของตนและพวกเขาในทางกลับกันเรียกวิธีการปรับปรุงทั้งหมดของพวกเขาเด็ก นี่เป็นวิธีเดียวที่ฉันสามารถเห็นการสร้างเกมเชิงวัตถุ แต่ฉันรู้สึกว่ามันไม่ใช่วิธีที่เหมาะ ท้ายที่สุดฉันจะไม่คิดว่าลูกบอลเป็นของกล่อง แต่อยู่ในระดับเดียวกันและมีปฏิสัมพันธ์กับมัน ฉันคิดว่าสามารถทำได้โดยการเปลี่ยนวัตถุเกมทั้งหมดเป็นตัวแปรสมาชิกของวัตถุเกมหลัก แต่ฉันไม่เห็นว่าการแก้ปัญหาอะไร ฉันหมายถึง ... ทิ้งความยุ่งเหยิงที่เห็นได้ชัดจะมีวิธีใดสำหรับลูกบอลและกล่องที่จะรู้จักซึ่งกันและกันนั่นคือการโต้ตอบ? นอกจากนี้ยังมีปัญหาของวัตถุที่ต้องการส่งผ่านข้อมูลระหว่างกัน ฉันมีประสบการณ์ค่อนข้างน้อยในการเขียนโค้ดสำหรับ SNES ซึ่งคุณสามารถเข้าถึง RAM ทั้งหมดได้ตลอดเวลา สมมติว่าคุณกำลังสร้างศัตรูที่กำหนดเองสำหรับSuper Mario …

1
วิธีที่ดีที่สุดในการเร่งการเข้าถึงข้อมูลไปยังคลังข้อมูลสองแห่งคืออะไร?
ฉันกำลังดำเนินโครงการข่าวกรองธุรกิจซึ่งจะต้องมีการเข้าถึงข้อมูลที่เป็นนามธรรมไปยังคลังข้อมูลที่มีอยู่สองแห่ง ฉันต้องออกแบบสถาปัตยกรรมแอปพลิเคชันเพื่อให้ระบบธุรกิจอัจฉริยะแบบบริการตนเองเข้าร่วมข้อมูลและให้มุมมองเดียวกับคลังสินค้าที่มีอยู่สองแห่ง ฉันเกิดอะไรขึ้นกับสิ่งนี้: ฉันกำลังดิ้นรนกับชิ้นส่วนเสมือนจริง / แคชและสงสัยว่ามีรูปแบบการออกแบบองค์กรใด ๆ เพื่อแก้ปัญหาของฉันหรือไม่ สถาปัตยกรรมแบบนี้สามารถใช้ได้กับแผนผังดาวนามธรรมในคลังข้อมูลหรือไม่ ฉันกำลังดูผลิตภัณฑ์เช่นRed Hat JBoss Data VirtualizationและRed Hat JBoss Data Grid (รวมถึงอื่น ๆ ) เราไม่ได้ใช้ Hibernate ในปัจจุบันและความเข้าใจของฉันเกี่ยวกับ Data Grids คือพวกเขาเป็นที่เก็บคีย์ - ค่าหรือที่เก็บวัตถุและดังนั้นจึงไม่เหมาะสมสำหรับการแคชโมเดลเชิงสัมพันธ์ ฉันควรจะพูดถึงว่าเรามีความกระตือรือร้นที่จะใช้ผลิตภัณฑ์ของผู้จัดจำหน่ายสำหรับส่วนแดชบอร์ดบริการตนเอง แต่เราอาจลงเอยด้วยการสร้างแบบกำหนดเองบางอย่างในพื้นที่นี้หากผู้ขายไม่สามารถเสนอสิ่งที่เราต้องการทุกอย่าง

4
การแยกการดึงข้อมูลและวัตถุธุรกิจระหว่างชั้น DAL และ BLL
ฉันได้ทำการวิจัยก่อนโพสต์คำถามนี้ ในบรรดาคำถามหรือโพสต์อื่น ๆ ข้อใดข้อหนึ่งมีให้ด้านล่าง ฉันไม่สามารถทราบวิธีการกำหนด .. วัตถุธุรกิจภายใน Data Access Layer ฉันมีที่เก็บและชั้นธุรกิจเรียกที่เก็บเพื่อเรียกข้อมูล ตัวอย่างเช่นสมมติว่าฉันมีคลาสต่อไปนี้สำหรับ BLL และ DAL: class BllCustomer { public int CustomerId {get; set;} public String Name {get; set;} public BllAddress Address {get; set;} } class BllAddress { public int AddressId {get; set;} public String Street {get; set;} public String City …

1
ออกแบบสำหรับกรอบแอปพลิเคชันที่จะช่วยให้แต่ละการใช้งานสามารถปรับแต่งส่วนต่างๆของ UI
ฉันได้รับมอบหมายให้ออกแบบเฟรมเวิร์กแอปพลิเคชันที่จะอนุญาตให้แต่ละการปรับใช้ส่วนต่าง ๆ ของส่วนติดต่อผู้ใช้เอง ตัวอย่างหนึ่งดังกล่าวอาจเป็นไปได้ว่าการใช้งาน (ลองเรียกว่าไคลเอนต์นับจากนี้เป็นต้นไป) สามารถกำหนดเซลล์มุมมองคอลเลกชันที่จะกลับมาสำหรับหน้าจอเฉพาะ เฟรมเวิร์กมีหน้าที่รับผิดชอบในการจำหน่ายวัตถุที่เหมาะสมเพื่อให้การสร้างแอปง่ายขึ้นมากเนื่องจากเราจะสร้างอินสแตนซ์ที่ดูคล้ายกันหลายครั้ง แนวทางปัจจุบันของฉันในกรอบการทำงานคือการออกแบบตัวควบคุมประสานงานที่รับผิดชอบการนำเสนอและเลิกจ้างกิจกรรมทั้งหมดในแอพ ตัวควบคุมการประสานงานเริ่มต้นจะแสดงตัวควบคุมมุมมองเริ่มต้นทั้งหมดภายในกรอบงานที่ทำงานทั้งหมดที่เกี่ยวข้องโดยไม่จำเป็นต้องมี UI ที่กำหนดค่าไว้ ตัวอย่างเช่น: หนึ่งคอนโทรลเลอร์จะแสดงมุมมองคอลเลกชันที่มีเซลล์แม่แบบและไม่มีอะไรพิเศษ ประโยชน์ของการออกแบบนี้คือการลบการเชื่อมต่อระหว่างตัวควบคุมและยังช่วยให้ลูกค้าสามารถแทนที่ผู้ประสานงานเริ่มต้นและส่งกลับตัวควบคุมมุมมองใหม่ทั้งหมดสำหรับงานเฉพาะ ปัญหาที่ฉันมีคือฉันควรออกแบบกรอบงานนี้อย่างไรเพื่อให้ลูกค้าสามารถเพิ่ม UI ที่กำหนดเองของตัวเองลงในแอพได้ แนวทางที่หนึ่ง ทำให้เฟรมเวิร์กจำเป็นต้องใช้มุมมองจากโรงงานและให้มุมมองนี้จากโรงงานรับผิดชอบในการจำหน่ายมุมมองที่เกี่ยวข้องทั้งหมด ดังนั้นใน App Delegate เราอาจบังคับให้ไคลเอนต์สร้าง CollectionViewCellFactory เป็นต้นและอินเทอร์เฟซจะกำหนดเซลล์ทั้งหมดที่คลาสที่สอดคล้องกันใด ๆ จะต้องจัดหา ฉันสืบทอดฐานรหัสด้วยการออกแบบนี้และย้ายออกไปจากที่นี่เพราะมันเป็นนามธรรมและปรับแต่งได้ มันมาพร้อมกับโรงงานมากมายสำหรับทุกแง่มุมของแอพและจะเพิ่มวันเข้าสู่เวลาตั้งค่าของแอพทุกตัว แนวทางที่สอง แต่ละตัวควบคุมมุมมองระบุ hooks subclassing หรือ setup API ที่จะอนุญาตให้กำหนด UI คลาสแบบกำหนดเองเหล่านี้ในเวลาทำงาน (คล้ายกับวิธีที่ UISplitViewController อนุญาตให้ผู้เรียกตั้งค่าตัวควบคุมโดยใช้คุณสมบัติ viewControllers) ในการทำสิ่งนี้ลูกค้าแต่ละคนจะทำการ subclass Base ประสานงานควบคุมและในแต่ละงานนำเสนอของคอนโทรลเลอร์ ตั้งค่าที่เหมาะสมลงบนคอนโทรลเลอร์เพื่อให้ได้ UI ที่ต้องการ …

2
REST หรือคิวข้อความในระบบที่ต่างกันหลายระดับ?
ฉันออกแบบ API REST สำหรับระบบสามชั้นเช่น: Client application-> ->Front-end API cloud serveruser's home API server (Home) Homeเป็นอุปกรณ์บ้านและควรจะรักษาเชื่อมต่อFront-endผ่าน WebSocket หรือโพลล์ยาว(นี้เป็นสถานที่แรกที่เรากำลังละเมิด REST. จะได้รับก็แย่ภายหลัง) Front-endช่องสัญญาณส่วนใหญ่Clientร้องขอการHomeเชื่อมต่อและจัดการการโทรบางตัว บางครั้งส่งการแจ้งเตือนไปยังHomeClient Front-endและHomeมี API เดียวกันโดยทั่วไป Clientอาจเชื่อมต่อHomeโดยตรงผ่าน LAN ในกรณีนี้Homeจำเป็นต้องลงทะเบียนClientการกระทำบางอย่างกับFront-endตัวเอง ข้อดีสำหรับ REST ในระบบนี้คือ: REST สามารถอ่านได้โดยมนุษย์ ส่วนที่เหลือมีการทำแผนที่กริยาที่กำหนดไว้อย่างดี (เช่น CRUD) คำนามและรหัสการตอบสนองกับวัตถุโปรโตคอล; มันทำงานผ่าน HTTP และส่งผ่านผู้รับมอบฉันทะที่เป็นไปได้ทั้งหมด; ส่วนที่เหลือ REST คือ: เราไม่เพียง แต่ต้องการสไตล์การสื่อสารที่ตอบสนองการร้องขอเท่านั้น รหัสข้อผิดพลาด HTTP อาจไม่เพียงพอสำหรับจัดการข้อผิดพลาดการสื่อสารสามระดับ Front-endอาจจะกลับ202 Acceptedไปโทร async …

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