Як ви називаєте заняття без методів?
Наприклад,
class A
{
public string something;
public int a;
}
Вище - клас без жодних методів. Чи має цей тип класу спеціальну назву?
Як ви називаєте заняття без методів?
Наприклад,
class A
{
public string something;
public int a;
}
Вище - клас без жодних методів. Чи має цей тип класу спеціальну назву?
Відповіді:
Більшість часу: анти-візерунок.
Чому? Тому що це сприяє процедурному програмуванню з класами та структурами даних "Оператор". Ви розділяєте дані та поведінку, що не зовсім добре OOP.
Часто: DTO (Об'єкт передачі даних)
Читати лише структури даних, призначені для обміну даними, отриманими від об'єкта бізнес / домен.
Іноді: Просто структура даних.
Ну іноді, ви просто повинні мати ті структури, щоб зберігати дані, які є просто і просто, і не має операцій над ним. Але тоді я б не використовував публічні поля, а лише аксесуари (геттери та сетери).
Я б назвав це struct
або record
тому, що він використовується для зберігання даних, і це дуже часто для таких мов, як, C
як ви бачите там: struct (мова програмування на C) . Тож особисто я вважаю за краще використовувати struct
замість класу, який є більш підходящим і читабельним:
struct A
{
public string something;
public int a;
}
Зазвичай вони використовуються як DTO (Object Transfer Data), як говорили інші.
Вони відомі як Plain Old __ Objects (PO_Os), де порожнім є Java або C або CIL, або будь-якою мовою ви користуєтеся.
Якщо вони використовуються як прості блоки даних для зв'язку, то вони можуть називатися об'єктами передачі даних (DTO).
Якщо вони представляють деякі надані зовні дані, вони можуть бути відомими як Суб'єкти .
Я б назвав такий клас мутаційним власником даних і іноді використовував загальну форму:
class DataHolder<T>
{
public T dat;
}
Зауважте, що загортання dat
у власність погіршить ефективність і не принесе користі, оскільки аксесуар власності не може зробити нічого (крім поля читання / запису), що не порушило б деякі реалізації. Далі, можливо, буде потрібно використовувати Interlocked
методи з dat
(або, якщо це структура, з її полями), але це було б неможливо, якби вони dat
були загорнуті у властивість.
Зауважте, що, хоча власники даних, що змінюються, можуть бути корисними для типів (змінних чи ні), яким потрібно зберігати дані, вони не можуть безпечно використовуватися для обміну даними так само, як і незмінні типи. Наприклад, твердження типу:
myData = myCollection.GetData(myKey);
матиме чітке значення, якщо б GetData
повернув тип незмінного класу або структуру ("змінний" чи ні), яка не містила посилань на змінні дані. Якщо він повернув об'єкт класу, що змінюється, однак, було б незрозуміло, чи будь-які зміни цього об'єкта послідовно ігноруються базовою колекцією, послідовно призводять до чистих оновлень до нього, або спричиняють якесь набридливе або непередбачуване поведінку, що не відповідає жодному опису.
Якщо б хто хотів, щоб дані про повернення колекції були в об'єкті, що змінюється, правильна парадигма часто була б такою, як:
var myData = new WhateverType();
myCollection.GetData(myKey, myData);
myData.ModifySomehow();
myCollection.StoreData(myKey, myData);
Використовуючи такий підхід, існує чітке значення, яке GetData
призведе myData
до заповнення даними зі збору, але myCollection
не слід очікувати, що воно буде посилатися на нього, коли функція буде завершена, і не буде використовувати її для будь-яких інших цілей. StoreData
також скопіював би інформацію myData
у свою внутрішню структуру даних, не зберігаючи посилання. Зауважте, що однією з переваг цього підходу є те, що якщо код клієнта буде читати багато елементів даних у циклі, він може безпечно створити один екземпляр myData
поза циклом, а потім повторно використовувати цей самий екземпляр кожен раз. Так само myCollection
може бути в змозі повторно використовувати об'єкт об'єкта, пов'язаний з ключем (копіювання даних з переданого екземпляра), без необхідності створювати новий екземпляр.