สิ่งใดที่คุณเรียกคลาสที่ไม่มีเมธอด
ตัวอย่างเช่น,
class A
{
public string something;
public int a;
}
ด้านบนเป็นคลาสที่ไม่มีวิธีการใด ๆ คลาสประเภทนี้มีชื่อพิเศษหรือไม่?
สิ่งใดที่คุณเรียกคลาสที่ไม่มีเมธอด
ตัวอย่างเช่น,
class A
{
public string something;
public int a;
}
ด้านบนเป็นคลาสที่ไม่มีวิธีการใด ๆ คลาสประเภทนี้มีชื่อพิเศษหรือไม่?
คำตอบ:
ส่วนใหญ่เวลา: รูปแบบการต่อต้าน
ทำไม? เพราะมันช่วยให้การเขียนโปรแกรมขั้นตอนกับชั้นเรียน "ผู้ประกอบการ" และโครงสร้างข้อมูล คุณแยกข้อมูลและพฤติกรรมที่ไม่ดีกับ OOP
บ่อยครั้ง: A DTO (Data Transfer Object)
อ่านเฉพาะโครงสร้างข้อมูลเพื่อแลกเปลี่ยนข้อมูลที่ได้มาจากวัตถุธุรกิจ / โดเมน
บางครั้ง: แค่โครงสร้างข้อมูล
บางครั้งคุณต้องมีโครงสร้างเหล่านั้นเพื่อเก็บข้อมูลที่เรียบง่ายและไม่มีการดำเนินการใด ๆ แต่ฉันจะไม่ใช้ฟิลด์สาธารณะยกเว้น accessors (getters and setters)
ฉันเรียกมันstruct
หรือrecord
เพราะมันถูกนำมาใช้สำหรับการจัดเก็บข้อมูลและนี้เป็นเรื่องธรรมดามากที่จะภาษาเช่นC
ในขณะที่คุณสามารถดูมี: struct (โปรแกรมภาษา C) โดยส่วนตัวแล้วฉันต้องการใช้struct
คลาสที่เหมาะสมและอ่านได้มากกว่า:
struct A
{
public string something;
public int a;
}
พวกเขามักจะใช้เป็นDTOs (Data Transfer Object)ตามที่คนอื่นพูด
สิ่งเหล่านี้รู้จักกันในชื่อOld Plain __ Objects (PO_Os) โดยที่ blank คือ Java หรือ C หรือ CIL หรือภาษาที่คุณใช้
หากพวกมันถูกใช้เป็นบล็อคข้อมูลอย่างง่ายสำหรับการสื่อสารพวกเขาก็สามารถรู้จักกันในชื่อData Transfer Objects (DTOs)
หากพวกเขากำลังเป็นตัวแทนของข้อมูลที่ได้รับจากภายนอกบางพวกเขาสามารถเป็นที่รู้จักในฐานะหน่วยงาน
ฉันจะเรียกชั้นเช่นนี้เป็นผู้ถือข้อมูลที่ไม่แน่นอนและบางครั้งก็ใช้รูปแบบทั่วไป:
class DataHolder<T>
{
public T dat;
}
โปรดทราบว่าการห่อdat
ภายในพร็อพเพอร์ตี้จะทำให้ประสิทธิภาพลดลงและไม่ได้รับประโยชน์เนื่องจากไม่มีสิ่งใดที่ตัวเข้าถึงคุณสมบัติสามารถทำได้ (นอกเหนือจากการอ่าน / เขียนฟิลด์) ซึ่งจะไม่ทำให้แอพพลิเคชั่นบางอย่างเสียหาย นอกจากนี้อาจจำเป็นต้องใช้Interlocked
วิธีการที่มีdat
(หรือถ้าเป็นโครงสร้างพร้อมเขตข้อมูล) แต่ไม่สามารถทำได้หากdat
ถูกห่อในคุณสมบัติ
โปรดทราบว่าในขณะที่ผู้ถือข้อมูลที่ไม่แน่นอนอาจมีประโยชน์สำหรับประเภท (ไม่แน่นอนหรือไม่) ซึ่งจำเป็นต้องเก็บข้อมูลพวกเขาไม่สามารถใช้สำหรับการแลกเปลี่ยนข้อมูลได้อย่างปลอดภัยในลักษณะเดียวกับประเภทที่ไม่เปลี่ยนรูปแบบ ตัวอย่างเช่นคำสั่งเช่น:
myData = myCollection.GetData(myKey);
จะมีความหมายที่ชัดเจนหากGetData
ส่งกลับประเภทชั้นที่ไม่เปลี่ยนรูปหรือ struct ("ไม่แน่นอน" หรือไม่) ซึ่งไม่ได้มีการอ้างอิงถึงข้อมูลที่ไม่แน่นอน ถ้ามันส่งคืนคลาสอ็อบเจ็กต์ที่ไม่แน่นอนอย่างไรก็ตามมันจะไม่ชัดเจนว่าการเปลี่ยนแปลงใด ๆ กับอ็อบเจ็กต์นั้นจะถูกละเว้นโดยการรวบรวมพื้นฐานส่งผลให้มีการอัพเดตใหม่ทั้งหมดหรือทำให้เกิดพฤติกรรมที่น่ารำคาญหรือคาดเดาไม่ได้
หากมีใครต้องการเก็บรวบรวมข้อมูลที่ส่งคืนในวัตถุที่เปลี่ยนแปลงได้กระบวนทัศน์ที่ถูกต้องมักจะเป็นสิ่งที่ต้องการ:
var myData = new WhateverType();
myCollection.GetData(myKey, myData);
myData.ModifySomehow();
myCollection.StoreData(myKey, myData);
การใช้วิธีการนั้นมีความหมายชัดเจนที่GetData
จะทำให้myData
ข้อมูลจากการรวบรวม แต่myCollection
จะไม่ถูกคาดหวังว่าจะอ้างอิงถึงเมื่อฟังก์ชั่นเสร็จสมบูรณ์และจะไม่ใช้เพื่อวัตถุประสงค์อื่นใด StoreData
จะคัดลอกข้อมูลmyData
ไปยังโครงสร้างข้อมูลภายในของตัวเองโดยไม่ต้องอ้างอิง โปรดทราบว่าข้อดีอย่างหนึ่งของวิธีนี้คือถ้ารหัสลูกค้าจะอ่านรายการข้อมูลจำนวนมากภายในลูปมันอาจสร้างอินสแตนซ์myData
นอกวงหนึ่งอย่างปลอดภัยแล้วนำอินสแตนซ์เดียวกันนั้นกลับมาใช้ใหม่ทุกครั้ง ในทำนองเดียวกันmyCollection
อาจสามารถใช้งานอินสแตนซ์ของวัตถุที่เชื่อมโยงกับคีย์ (คัดลอกข้อมูลจากอินสแตนซ์ที่ส่งผ่าน) โดยไม่ต้องสร้างอินสแตนซ์ใหม่
ฉันเรียกพวกเขาว่าหน่วยงานขึ้นอยู่กับบริบท ในแอปพลิเคชันทางธุรกิจที่น่าเบื่อของฉันพวกเขามักจะแมป 1: 1 กับ DER ของฉัน
Schema
ฉันจะเรียกมันว่า
สิ่งนี้ครอบคลุมการใช้งานหลายอย่างเช่นการเป็นตัวแทนของตารางฐานข้อมูลหรือการบันทึก deserialised หรือ DTO เป็นต้น