ฉันควรใส่วิธีที่ทำให้การร้องขอ Http รับข้อมูลจากบริการเว็บในการพัฒนา iOS ที่ไหน


9

ฉันมี Model Car ในแอปพลิเคชัน iOS ของฉันซึ่งเป็นพารามิเตอร์เช่นชื่อ, ปี, ค่าและอื่น ๆ ถูกดึงมาจากบริการเว็บเพื่อเติมรายการด้วยข้อมูลรถยนต์

ฉันควรจะวางวิธีการแบบอะซิงโครนัสไปที่เซิร์ฟเวอร์และส่งกลับอาร์เรย์รถยนต์ (วิธีนี้แปลง JSON ไปเป็นอาร์เรย์รถยนต์แล้วหรือไม่)

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

พวกคุณทำอะไรในสถานการณ์นี้

ฉันกังวลเพราะเมื่อเร็ว ๆ นี้ฉันเริ่มอ่านโค้ดที่สะอาดซึ่งบอกว่า Class ควรทำสิ่งเดียวเท่านั้นและวิธีที่ฉันมีตอนนี้ดูเหมือนจะทำ 2 สิ่ง (เก็บข้อมูลเกี่ยวกับรถยนต์และรับรายการรถยนต์)

คำตอบ:


4

ฉันจะแนะนำ CarBroker Object ที่จัดการคำขอ Cars และวิธีการเปิดเผยเช่น:

  1. getCars - สำหรับรับรายการรถยนต์ทุกคัน
  2. getCarByID - สำหรับรถยนต์เฉพาะ

นอกจากนี้วัตถุดังกล่าวสามารถจัดการคำขอจากตัวแทนจำหน่ายรถยนต์รายอื่น (หากจำเป็น) ไม่ว่าจะด้วยวิธีใดก็มีความรับผิดชอบที่แท้จริงอย่างหนึ่งคือBrokering Carsซึ่งต่างจากการเป็น Car Object ที่มีความรับผิดชอบของ Car Object และ Object Broker


ฟังดูดีเพราะตอนนี้คุณมีวัตถุรถยนต์สะอาดที่สามารถนำกลับมาใช้ใหม่ได้ ถ้าคุณเริ่มใช้โปรโตคอลการเข้าถึงอื่นในการรับข้อมูล ในสถานการณ์นั้นคุณต้องเริ่มต้นที่ไหนสักแห่งคุณรู้ว่าคุณประมวลผลทั้งหมด \ rules \ logic รหัสในด้านหนึ่งยอมรับวัตถุรถยนต์ จากนั้นคุณสามารถเริ่มต้น reimplementing CarBroker โดยใช้ REST หรืออะไรก็ตาม แต่คุณแล้วมีครึ่งหนึ่งและไม่ได้มีการ reprogram และตรรกะสอบซ่อมที่ภายในที่เกี่ยวข้องเฉพาะกับนามธรรมรถยนต์
Andyz Smith

1

ที่นี่การรักษาวัตถุอื่นควรจะถูกเก็บไว้ที่ไหนสักแห่งที่ไม่สามารถรับประกันได้ว่าผู้ปกครองจะมีชีวิตอยู่ตลอดเวลาเพื่อดำเนินการตอบสนอง

ฉันแนะนำให้ใช้งานเหล่านี้ในชั้นเรียนเดี่ยว การรักษาคลาสนี้จะมีประโยชน์สำหรับการใช้งานเมธอดทั่วไปที่สามารถเรียกได้บ่อยมาก


-1

คุณสามารถเรียกใช้วิธีการแบบอะซิงโครนัสภายในวิธีการ ViewDidLoad เมื่ออาร์เรย์ส่งคืนจากเว็บรีเฟรชมุมมองคุณสามารถบันทึกอาร์เรย์ในฐานข้อมูลดังนั้นคุณจะไม่จำเป็นต้องโหลดข้อมูลจากเว็บทุกครั้งที่โหลด Viewcontroller


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