ชนิดของวัตถุ
สำหรับจุดประสงค์ของการสนทนาเราแยกวัตถุของเราออกเป็นสามประเภท:
เหล่านี้คือวัตถุที่ทำงานให้เสร็จ พวกเขาย้ายเงินจากบัญชีที่ตรวจสอบบัญชีหนึ่งไปยังอีกบัญชีปฏิบัติตามคำสั่งซื้อและการดำเนินการอื่น ๆทั้งหมดที่เราคาดว่าจะได้รับจากซอฟต์แวร์ธุรกิจ
ตามปกติแล้ววัตถุลอจิกของโดเมนไม่จำเป็นต้องมี accessors (getters and setters) แต่คุณสร้างวัตถุโดยส่งมันขึ้นต่อกันผ่านคอนสตรัคแล้วจัดการกับวัตถุผ่านเมธอด (บอกอย่าถาม)
Data Transfer Objects เป็นสถานะที่บริสุทธิ์ ไม่มีตรรกะทางธุรกิจใด ๆ พวกเขาจะมี accessors พวกเขาอาจมีหรือไม่มีเซ็ตเตอร์เตอร์ขึ้นอยู่กับว่าคุณกำลังเขียนพวกเขาในแบบที่ไม่เปลี่ยนรูปแบบหรือไม่ คุณจะตั้งค่าเขตข้อมูลของคุณในตัวสร้างและค่าของพวกเขาจะไม่เปลี่ยนแปลงตลอดอายุของวัตถุมิฉะนั้น accessors ของคุณจะอ่าน / เขียน ในทางปฏิบัติวัตถุเหล่านี้มักจะไม่แน่นอนเพื่อให้ผู้ใช้สามารถแก้ไขได้
มุมมองวัตถุแบบจำลองประกอบด้วยการแสดงข้อมูลที่แสดง / แก้ไขได้ อาจมีตรรกะทางธุรกิจซึ่งปกติจะ จำกัด อยู่ที่การตรวจสอบความถูกต้องของข้อมูล ตัวอย่างของวัตถุรูปแบบการดูอาจเป็น InvoiceViewModel ซึ่งมีวัตถุลูกค้าวัตถุส่วนหัวของใบแจ้งหนี้และรายการโฆษณาใบแจ้งหนี้ ดูวัตถุรูปแบบมักจะมีการเข้าถึง
ดังนั้นวัตถุชนิดเดียวที่จะ "บริสุทธิ์" ในแง่ที่ว่ามันไม่มีตัวเข้าถึงฟิลด์จะเป็นวัตถุ Domain Logic การทำให้วัตถุเป็นอนุกรมนั้นจะบันทึก "สถานะการคำนวณ" ในปัจจุบันเพื่อให้สามารถดึงข้อมูลได้ในภายหลังเพื่อการประมวลผลที่สมบูรณ์ ดูรุ่นและ DTO สามารถจัดลำดับได้อย่างอิสระ แต่ในทางปฏิบัติแล้วข้อมูลของพวกเขาจะถูกบันทึกลงในฐานข้อมูล
การทำให้เป็นลำดับการอ้างอิงและการมีเพศสัมพันธ์
ในขณะที่มันเป็นความจริงที่ทำให้เป็นอันดับสร้างการพึ่งพาในแง่ที่ว่าคุณต้อง deserialize เป็นวัตถุที่เข้ากันได้มันไม่จำเป็นต้องทำตามที่คุณต้องเปลี่ยนการกำหนดค่าของคุณเป็นอนุกรม กลไกการจัดลำดับที่ดีมีวัตถุประสงค์ทั่วไป พวกเขาไม่สนใจว่าคุณจะเปลี่ยนชื่อของทรัพย์สินหรือสมาชิกตราบใดที่มันยังสามารถแมปค่ากับสมาชิก ในทางปฏิบัติสิ่งนี้หมายความว่าคุณต้องทำให้เป็นอินสแตนซ์ของวัตถุอีกครั้งเพื่อทำให้การเป็นตัวแทน (xml, json หรืออะไรก็ตาม) เข้ากันได้กับวัตถุใหม่ของคุณ; ไม่จำเป็นต้องทำการเปลี่ยนแปลงการกำหนดค่าของซีเรียลไลเซอร์
เป็นความจริงที่ว่าวัตถุไม่ควรเกี่ยวข้องกับวิธีการจัดลำดับวัตถุ คุณได้อธิบายถึงวิธีหนึ่งที่ข้อกังวลดังกล่าวสามารถถูกแยกออกจากคลาสโดเมน: แต่ serializer ควรกังวลเกี่ยวกับวิธีการทำให้เป็นอันดับและ deserializes วัตถุ นั่นคือหน้าที่ของมัน วิธีที่คุณเก็บวัตถุของคุณหลุดพ้นจากกระบวนการอนุกรมของคุณคือการทำให้เป็นอนุกรมวัตถุประสงค์ทั่วไปฟังก์ชั่นสามารถที่จะทำงานในทุกประเภทของวัตถุ
หนึ่งในสิ่งที่ผู้คนสับสนคือต้องแยก decoupling ออกทั้งสองทิศทาง มันไม่ใช่; จะมีเพียงการทำงานในหนึ่งทิศทาง ในทางปฏิบัติคุณไม่สามารถแยกได้อย่างสมบูรณ์ มีอยู่เสมอบางมีเพศสัมพันธ์ เป้าหมายของการคัปปลิ้งหลวม ๆ คือการทำให้การบำรุงรักษาโค้ดง่ายขึ้นไม่ใช่เพื่อกำจัดการพึ่งพาทั้งหมด