Что такое сущность в программировании
Перейти к содержимому

Что такое сущность в программировании

  • автор:

Сущности в программировании: основы, различия с объектами

В программировании, сущность �� – это как коробочка, которая хранит данные и правила для них. Подумайте о ней как о персонаже в игре, у которого есть имя, характеристики и способности. Это не просто данные, это данные с инструкциями на что они способны.

Сущность решает проблему организации и управления данными. Как если бы вы упаковывали разные предметы в коробки с ярлыками, чтобы легко находить и использовать их. Это делает код более читаемым и понятным, упрощая добавление новых функций и обслуживание.

Это важно, потому что упрощает написание программ. Представьте, что вы строите из LEGO, где каждый блок – это сущность. Зная, какие блоки у вас есть и как они соединяются, вы можете создавать сложные структуры быстрее и эффективнее. Это основа для создания мощных и гибких программных решений.

Пример

Давайте представим, что вы строите приложение для учета книг в библиотеке. В этом приложении каждая книга – это «сущность», потому что она имеет уникальные характеристики и данные, такие как название, автор, год издания и ISBN номер. В программировании, чтобы управлять этими книгами, мы создаем класс Book , который представляет собой шаблон или чертеж для создания объектов-книг с определенными свойствами и методами.

Скопировать код

public class Book < private String title; private String author; private int year; private String isbn; // Конструктор public Book(String title, String author, int year, String isbn) < this.title = title; this.author = author; this.year = year; this.isbn = isbn; >// Методы доступа (геттеры и сеттеры) public String getTitle() < return title; >public void setTitle(String title) < this.title = title; >public String getAuthor() < return author; >public void setAuthor(String author) < this.author = author; >public int getYear() < return year; >public void setYear(int year) < this.year = year; >public String getIsbn() < return isbn; >public void setIsbn(String isbn) < this.isbn = isbn; >// Метод для отображения информации о книге public void displayInfo() < System.out.println("Название: " + title + ", Автор: " + author + ", Год издания: " + year + ", ISBN: " + isbn); >>

Теперь, используя этот класс, мы можем создать объекты, которые представляют реальные книги в нашей библиотеке:

Скопировать код

public class LibraryApp < public static void main(String[] args) < // Создаем объекты книг Book book1 = new Book("Война и мир", "Лев Толстой", 1869, "123-456-789"); Book book2 = new Book("1984", "Джордж Оруэлл", 1949, "987-654-321"); // Отображаем информацию о книгах book1.displayInfo(); book2.displayInfo(); >>

В этом примере каждая книга в программе – это «сущность», потому что она имеет уникальные данные и поведение (метод displayInfo() для отображения информации). Создавая класс Book , мы определили общую структуру для всех книг в нашем приложении, что упрощает добавление новых книг и управление ими. Это показывает, как использование сущностей помогает организовать и структурировать код, делая его более читаемым и легко масштабируемым.

Различия между сущностями и объектами

В программировании, сущности и объекты часто путают, но между ними есть ключевые различия. Объекты – это экземпляры классов, которые могут содержать данные и методы для работы с этими данными. Сущности же – это особый тип объектов, которые имеют уникальный идентификатор (ID) и представляют собой конкретные данные в предметной области.

Проще говоря, если объект – это любая книга на полке, то сущность – это конкретная книга с уникальным номером, которую вы можете взять в руки. Это различие важно, потому что сущности помогают управлять уникальными данными и обеспечивают их целостность в программе или базе данных.

Примеры сущностей в коде

Примеры сущностей в коде помогают понять, как они используются на практике. Возвращаясь к нашему примеру с библиотекой, представим, что у нас есть система для учета пользователей. В этой системе каждый пользователь – это сущность, потому что у каждого есть уникальный ID.

Скопировать код

public class User < private String id; private String name; private String email; // Конструктор public User(String id, String name, String email) < this.id = id; this.name = name; this.email = email; >// Геттеры и сеттеры public String getId() < return id; >public void setId(String id) < this.id = id; >public String getName() < return name; >public void setName(String name) < this.name = name; >public String getEmail() < return email; >public void setEmail(String email) < this.email = email; >>

В этом примере каждый пользователь системы уникален благодаря своему ID. Это позволяет нам точно идентифицировать пользователя и работать с его данными.

Сущности в обработке естественного языка (NLP)

Сущности в обработке естественного языка играют огромную роль. В NLP сущности используются для идентификации и классификации именованных сущностей в тексте, таких как имена людей, организаций, географические названия и даты. Это помогает понять контекст и значимость информации в больших объемах текста.

Примеры методов извлечения сущностей из текста включают LSA (латентный семантический анализ), MWPE (метод взвешенных фразовых экстракторов) и TextRank. Эти методы помогают автоматизировать процесс анализа текста и извлечения из него значимой информации.

Значение сущностей для разработчиков

Понимание сущностей важно для разработчиков, особенно для новичков. Это знание помогает в создании чистого и эффективного кода. Сущности обеспечивают структурированное и систематическое представление данных в программе, что упрощает их управление, обновление и масштабирование.

Использование сущностей позволяет разработчикам создавать более организованный и гибкий код, который легче поддерживать и развивать. Это особенно важно в больших и сложных проектах, где управление данными становится критически важной задачей.

В заключение, сущности в программировании – это мощный инструмент для работы с данными. Они помогают разработчикам создавать более чистый, организованный и масштабируемый код. Понимание различий между сущностями и объектами, а также умение эффективно использовать сущности в коде, является ключевым навыком для любого программиста.

Сущность информатика Сущность это любой однозначно идентифицируемый конкретный или абстрактный объект включая события и

Сущность — это любой однозначно идентифицируемый конкретный или абстрактный объект, включая события и связи между объектами, информация о котором хранится и обрабатывается в базе данных (БД). В различных предметных областях значение этого термина может сужаться и обозначать специфические понятия.

Различие сущности и объекта

Этот раздел статьи ещё не написан.
Здесь может располагаться отдельный раздел. Помогите Википедии, написав его. ( 1 марта 2021 )

Типизация сущностей

Этот раздел статьи ещё не написан.
Здесь может располагаться отдельный раздел. Помогите Википедии, написав его. ( 1 марта 2021 )

Сущность в HTTP

Этот раздел статьи ещё не написан.
Здесь может располагаться отдельный раздел. Помогите Википедии, написав его. ( 2 марта 2021 )

Сущность в HTML

Этот раздел статьи ещё не написан.
Здесь может располагаться отдельный раздел. Помогите Википедии, написав его. ( 2 марта 2021 )

Сущность в XML

Этот раздел не завершён.
Вы поможете проекту, исправив и дополнив его.

Сущность — мельчайшая часть в документе, содержащая символы. У каждой сущности есть имя (существуют исключения, напр. документная сущность).

Сущность как элемент Java кода

Этот раздел статьи ещё не написан.
Здесь может располагаться отдельный раздел. Помогите Википедии, написав его. ( 1 марта 2021 )

Сущность в Bitrix Framework

Этот раздел не завершён.
Вы поможете проекту, исправив и дополнив его.

Сущность — объединение однотипных объектов, обладающих одинаковым набором ключевых характеристик. Также это конфигурация хранимого и обрабатываемого объекта, обеспечивающая корректность и целостность данных, обязывающая систему проверять формат данных и вхождение в диапазон допустимых значений.

Сущность в обработке естественного языка

Этот раздел не завершён.
Вы поможете проекту, исправив и дополнив его.

Сущности – наименования организаций, персон, географические объекты, различные символьно-цифровые конструкции, классы сущностей; сеть синтактико-семантических отношений между сущностями текста; структуры данных, описывающие упомянутые в тексте события и факты. Существует несколько моделей методов извлечения сущностей: LSA, MWPE, TextRank.

См. также

Использование сущности (служебная страница Википедии)

Рекомендуемая литература

Entity класс в Java — требования и определение.

Примечания

  1. ГОСТ 34.320-96 Информационные технологии (ИТ). Система стандартов по базам данных. Концепции и терминология для концептуальной схемы и информационной базы — docs.cntd.ru(неопр.) . docs.cntd.ru. Дата обращения: 6 апреля 2021.24 июля 2020 года.
  2. Объяснение слова «entity» во спецификации языка XML.(неопр.)Дата обращения: 2 марта 2021.10 января 2020 года.
  3. Концепция, описание сущности(неопр.) . dev.1c-bitrix.ru. Дата обращения: 1 марта 2021.22 апреля 2021 года.
  4. Т. В. Батура. [https://www.iis.nsk.su/files/book/file/Batura_Matlingvistika_i_avtomat._obrabotka_tekstov.pdf МАТЕМАТИЧЕСКАЯ ЛИНГВИСТИКА И АВТОМАТИЧЕСКАЯ ОБРАБОТКА ТЕКСТОВ НА ЕСТЕСТВЕННОМ ЯЗЫКЕ. Учебное пособие] (неопр.) . Дата обращения: 6 апреля 2021.10 апреля 2021 года.
  5. Смирнов И.В. [https://cs.hse.ru/data/2017/12/06/1161306556/Slides-IntroToAI-HSE-2017-09-Smirnov.pdf Обработка естественного языка и искусственный интеллект] (неопр.) . Лаборатория «Компьютерная лингвистика и интеллектуальный анализ информации». ИСА ФИЦ ИУ РАН.
  6. DeskBook — Entity(неопр.) . deskbook.info. Дата обращения: 2 марта 2021.18 июня 2021 года.

Это заготовка статьи об информационных технологиях и вычислительной технике. Помогите Википедии, дополнив её.

Это примечание по возможности следует заменить более точным.
В другом языковом разделе есть более полная статья Entität (Informatik) (нем.).
Вы можете помочь проекту, расширив текущую статью с помощью перевода

Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры

Дата публикации: Август 14, 2023, 19:41 pm
Самые читаемые

Озеро Таймыр

Овелар, Бланка

Овелар

Оводов, Владимир Сергеевич

Объединённая церковь в Папуа — Новой Гвинее и Соломоновых Островах

Объединённая церковь на Соломоновых Островах

Объединённая конгрегационалистская церковь Христа на Маршалловых Островах

Объединяющая церковь Кирибати

Объединенная церковь Христа в Мозамбике

Общинная журналистика

© Copyright 2021, Все права защищены.

Sushnost eto lyuboj odnoznachno identificiruemyj konkretnyj ili abstraktnyj obekt vklyuchaya sobytiya i svyazi mezhdu obektami informaciya o kotorom hranitsya i obrabatyvaetsya v baze dannyh BD 1 V razlichnyh predmetnyh oblastyah znachenie etogo termina mozhet suzhatsya i oboznachat specificheskie ponyatiya Soderzhanie 1 Razlichie sushnosti i obekta 2 Tipizaciya sushnostej 3 Sushnost v HTTP 4 Sushnost v HTML 5 Sushnost v XML 6 Sushnost kak element Java koda 7 Sushnost v Bitrix Framework 8 Sushnost v obrabotke estestvennogo yazyka 9 Sm takzhe 10 Rekomenduemaya literatura 11 PrimechaniyaRazlichie sushnosti i obekta PravitEtot razdel stati eshyo ne napisan Zdes mozhet raspolagatsya otdelnyj razdel Pomogite Vikipedii napisav ego 1 marta 2021 Tipizaciya sushnostej PravitEtot razdel stati eshyo ne napisan Zdes mozhet raspolagatsya otdelnyj razdel Pomogite Vikipedii napisav ego 1 marta 2021 Sushnost v HTTP PravitEtot razdel stati eshyo ne napisan Zdes mozhet raspolagatsya otdelnyj razdel Pomogite Vikipedii napisav ego 2 marta 2021 Sushnost v HTML PravitEtot razdel stati eshyo ne napisan Zdes mozhet raspolagatsya otdelnyj razdel Pomogite Vikipedii napisav ego 2 marta 2021 Sushnost v XML PravitEtot razdel ne zavershyon Vy pomozhete proektu ispraviv i dopolniv ego Sushnost melchajshaya chast v dokumente soderzhashaya simvoly U kazhdoj sushnosti est imya sushestvuyut isklyucheniya napr dokumentnaya sushnost 2 Sushnost kak element Java koda PravitEtot razdel stati eshyo ne napisan Zdes mozhet raspolagatsya otdelnyj razdel Pomogite Vikipedii napisav ego 1 marta 2021 Sushnost v Bitrix Framework PravitEtot razdel ne zavershyon Vy pomozhete proektu ispraviv i dopolniv ego Sushnost obedinenie odnotipnyh obektov obladayushih odinakovym naborom klyuchevyh harakteristik Takzhe eto konfiguraciya hranimogo i obrabatyvaemogo obekta obespechivayushaya korrektnost i celostnost dannyh obyazyvayushaya sistemu proveryat format dannyh i vhozhdenie v diapazon dopustimyh znachenij 3 Sushnost v obrabotke estestvennogo yazyka PravitEtot razdel ne zavershyon Vy pomozhete proektu ispraviv i dopolniv ego Sushnosti naimenovaniya organizacij person geograficheskie obekty razlichnye simvolno cifrovye konstrukcii klassy sushnostej set sintaktiko semanticheskih otnoshenij mezhdu sushnostyami teksta struktury dannyh opisyvayushie upomyanutye v tekste sobytiya i fakty 4 5 Sushestvuet neskolko modelej metodov izvlecheniya sushnostej LSA MWPE TextRank Sm takzhe PravitCRUDER modelHTMLXMLPredmetno orientirovannoe proektirovanieProektirovanie baz dannyhPrincip otkrytosti zakrytostiSvyazyvanie imenovannyh sushnostejIspolzovanie sushnosti sluzhebnaya stranica Vikipedii Rekomenduemaya literatura PravitEntity klass v Java trebovaniya i opredelenie 6 Primechaniya Pravit GOST 34 320 96 Informacionnye tehnologii IT Sistema standartov po bazam dannyh Koncepcii i terminologiya dlya konceptualnoj shemy i informacionnoj bazy docs cntd ru neopr docs cntd ru Data obrasheniya 6 aprelya 2021 Arhivirovano 24 iyulya 2020 goda Obyasnenie slova entity vo specifikacii yazyka XML neopr Data obrasheniya 2 marta 2021 Arhivirovano 10 yanvarya 2020 goda Koncepciya opisanie sushnosti neopr dev 1c bitrix ru Data obrasheniya 1 marta 2021 Arhivirovano 22 aprelya 2021 goda T V Batura https www iis nsk su files book file Batura Matlingvistika i avtomat obrabotka tekstov pdf MATEMATIChESKAYa LINGVISTIKA I AVTOMATIChESKAYa OBRABOTKA TEKSTOV NA ESTESTVENNOM YaZYKE Uchebnoe posobie neopr Data obrasheniya 6 aprelya 2021 Arhivirovano 10 aprelya 2021 goda Smirnov I V https cs hse ru data 2017 12 06 1161306556 Slides IntroToAI HSE 2017 09 Smirnov pdf Obrabotka estestvennogo yazyka i iskusstvennyj intellekt neopr Laboratoriya Kompyuternaya lingvistika i intellektualnyj analiz informacii ISA FIC IU RAN DeskBook Entity neopr deskbook info Data obrasheniya 2 marta 2021 Arhivirovano 18 iyunya 2021 goda Eto zagotovka stati ob informacionnyh tehnologiyah i vychislitelnoj tehnike Pomogite Vikipedii dopolniv eyo Eto primechanie po vozmozhnosti sleduet zamenit bolee tochnym V drugom yazykovom razdele est bolee polnaya statya Entitat Informatik nem Vy mozhete pomoch proektu rasshiriv tekushuyu statyu s pomoshyu perevoda Istochnik https ru wikipedia org w index php title Sushnost informatika amp oldid 124768250

Сущности и связи — JS: Предметно-ориентированное проектирование

ERM — Модель данных, позволяющая описывать концептуальные схемы предметной области.

Сущности

Этот подход включает в себя два основных понятия: сущность и связь. Проще всего начать с примеров:

  • Пользователь
  • Кинозал
  • Фильм
  • Билет
  • Показ фильма

Это сущности нашей предметной области, с которыми предстоит работать в коде. Как видите, понятие сущность довольно интуитивно. Но также оно обладает и рядом формальных характеристик:

  • Идентификация
  • Время жизни

Идентификация означает, что мы можем рассматривать сущности независимо и выделять одни среди других. Например, у нас есть разные кинозалы, и это разные сущности. Другой пример это пользователи. Даже если два человека имеют одинаковые ФИО, мы всё равно сможем их различить на основе дополнительных признаков. В программировании обычно сущностям присваивается идентификатор (суррогатный ключ), который и используется для этой цели. Чаще всего эта задача возлагается на базу данных. В нашей ситуации базы нет, поэтому мы будем задавать его самостоятельно.

const user = new User('Илон'); console.log(user.id); // 896b677f-fb14-11e0-b14d-d11ca798dbac // User.js import uuid from 'uuid/v4'; class User  constructor(name)  this.id = uuid(); this.name = name; > > 

Библиотека uuid позволяет генерировать уникальный идентификатор, который можно использовать для идентификации. Кстати uuid очень полезная штука, может пригодиться в некоторых типах задач.

Время жизни означает, что наша сущность в какой-то момент появилась и когда-то может исчезнуть.

Связи

Между собой сущности образуют связи. Например, человек может быть владельцем нескольких машин, но машина может принадлежать только одному человеку. Пользователи Хекслета проходят много курсов, каждый курс доступен всем пользователям.

Таким образом можно выделить три основных типа связи: один к одному (o2o), один ко многим (o2m) и многие ко многим (m2m).

Выше представлена диаграмма Entity-Relationship. Она входит в стандарт UML и неплохо помогает понять то, какие сущности составляют вашу предметную область и как они друг с другом связаны.

Что можно сказать глядя на диаграмму?

  • В одном зале может быть много показов фильмов;
  • Один фильм может быть показан много раз;
  • Фильмы и залы связаны друг с другом как «многие ко многим». То есть один фильм показывается в разных залах, а в одном зале идут разные фильмы.

Всё это довольно очевидно и соответствует нашему опыту посещения кинозалов. В других предметных областях это уже не так просто, и то, как вы проектируете сущности и их связи, имеет сильное влияние на ваше приложение. Общее правило такое, чем больше связей и чем более они разнообразные, тем сложнее приложение. Часто бывает такое, что программисты «закладываются на будущее» (которое не факт, что наступит) и пытаются делать чуть ли не все связи m2m. Чаще всего такой подход оказывается примером over-engineering (гиперпроектирование), другими словами, не надо добавлять сложности там, где нет реальной потребности.

Кроме влияния на логику работы, связи также сильно влияют на способ хранения сущностей в базе данных. Например, в реляционных базах данных, связь m2m всегда подразумевает наличие промежуточной таблицы. В свою очередь рефакторинг базы данных не такое простое занятие, как изменение кода.

Пример

На Хекслете есть курсы. Каждый курс состоит из уроков. Урок не может существовать без курса. Вот как может быть представлена эта модель в коде:

const course = new Course('JS: DDD'); const lesson1 = new Lesson(course, 'Введение'); const lesson2 = new Lesson(course, 'Модель Сущность-Связь'); 

Передача курса в конструктор удобна по двум причинам. Сразу становится видна и понятна связь урока с курсом. А также на уровне языка заложено бизнес-правило, что урок не может существовать без курса.

Объекты-значения (Справочники)

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Введение в проектирование сущностей, проблемы создания объектов

При моделировании такого понятия предметно-ориентированного проектирования как сущность могут возникнуть некоторые сложности, обусловленные бизнес-требованиями или технической частью. В частности, иногда возникает сложность с созданием объекта-сущности.

В данной статье описываются две такие проблемы, и рассматривается способ их решения. Так же статья подойдет как введение в проектирование сущностей. Для понимания материала понадобится базовое представление о предметно-ориентированном проектировании.

Итак, мы изучили предметную область, сформировали единый язык, выделили ограниченные контексты и определились с требованиями [2]. Всё это выходит за рамки данной статьи, тут мы попробуем решить конкретные узкие проблемы:

  1. Создание и обеспечение консистентности сложных объектов-сущностей.
  2. Создание объектов-сущностей с генерацией идентификатора по автоинкрементному полю базы данных.

Введение

У нас есть клиент, который должен быть смоделирован как сущность (Entity) [2]. С точки зрения бизнеса у каждого клиента обязательно есть:

  • имя или наименование;
  • организационная форма (физ. лицо, ИП, ООО, АО и т.д.);
  • главный менеджер (один из менеджеров, закрепляется за клиентом);
  • информация о фактическом адресе;
  • информация о юридическом адресе.

В простом случае класс, реализующий моделируемую сущность, может выглядеть следующим образом.

namespace Domain; final class Client

Целый ряд свойств мы опустили, для упрощения примера, реальный класс может быть значительно больше.

Полученная модель анемичная, перегружена ничего не значащими сеттерами вместо методов описывающих поведение соответствующее бизнес-требованиям. В любой момент, при таком подходе, можно создать объект в неконсистентном состоянии или нарушить бизнес-логику, установив один из параметров например так.

$client = new Client(); // В данный момент клиент у нас уже находится в не консистентном состоянии // Если мы хотим запросить его идентификатор, то получим ошибку, т.к. он ещё не установлен $client->getId(); // Или мы можем сохранить (попытаться) не валидного клиента, у которого не установлены обязательные свойства $repository->save($client); 

Создание и обеспечение консистентности сложных объектов-сущностей.

Для начала попробуем решить проблему консистентности. Для этого уберем из класса сеттеры, а все обязательные параметры будем запрашивать в конструкторе [4]. Таким образом, объект будет всегда валиден, может использоваться сразу после создания и обеспечивается полноценная инкапсуляция предотвращающая возможность приведения клиента в неконсистентное состояние. Теперь наш класс выглядит следующим образом.

namespace Domain; final class Client

Проблему мы решили, но получилось не слишком изящно. 8 параметров у конструктора, и это не предел. Конечно, далеко не каждая сущность требует так много обязательных параметров, это, пожалуй, не совсем рядовая ситуация, но и не необычная.

Что можно с этим сделать? Простое и очевидное решение — сгруппировать логически связанные параметры в объектах-значениях (Value Object) [3].

namespace Domain; final class Address
namespace Domain; final class Client

Выглядит гораздо лучше, но параметров всё ещё довольно много, особенно это не удобно, если часть из них скалярные. Решение — шаблон Строитель (Builder) [5].

namespace Application; interface ClientBuilder
$client = $builder->setId($id) ->setName($name) ->setGeneralManagerId($generalManager) ->setCorporateForm($corporateForm) ->setAddress($address) ->buildClient(); 

Таким образом, моделируемая сущность всегда находится в консистентном состоянии и при этом может быть гибко и понятно построена, не зависимо от сложности создаваемого объекта и количества параметров.

Создание объектов-сущностей с генерацией идентификатора по автоинкрементному полю базы данных.

У проектируемого класса обязательно должен быть уникальный идентификатор, т.к. основной отличительной чертой сущностей является индивидуальность. Объект может значительно изменяться с течением времени, так что ни одно из его свойств не будет равным тому, что было вначале. В то же время все или большинство свойств объекта могут совпадать со свойствами другого объекта, но это будут разные объекты. Именно уникальный идентификатор дает возможность различать каждый объект не зависимо от его текущего состояния [1].

Существуют различные способы формирования идентификаторов, такие как пользовательский ввод, генерация в приложении по какому-либо алгоритму, может генерироваться базой данных.

Cгенерировать, например, UUID или запросить у базы данных очередное значение последовательности не составляет никаких трудностей. Но иногда возникает необходимость работать с уже существующей структурой БД, в которой таблица хранящая соответствующие данные имеет для идентификатора автоинкрементное поле.

В таком случае крайне затруднительно и ненадежно получать очередной уникальный идентификатор без сохранения сущности, а значит невозможно создать объект в полностью консистентном состоянии.

И снова нам поможет в этом шаблон Строитель, который мы можем реализовать следующим образом.

namespace Infrastructure; final class MySqlClientBuilder implements ClientBuilder < private $connection; public function __construct(Connection $connection); public function buildClient() < $this->connection ->insert('clients_table', [ $this->name, $this->corporateForm, $this->generalManager->getId(), $this->address ]); $id = $this->connection->lastInsertId(); return new Client( $id, $this->name, $this->corporateForm, $this->generalManager, $this->address ); > > 

Таким образом мы сначала добавляем соответствующую запись в базу данных, после чего получаем её идентификатор и создаем объект. Клиенту об этом знать не обязательно и при изменении способа хранения или генерации идентификаторов вам понадобится только заменить реализацию Строителя в вашем контейнере зависимостей.

$builder = $container->get(ClientBuilder::class); $client = $builder->setId($id) ->setName($name) ->setGeneralManagerId($generalManager) ->setCorporateForm($corporateForm) ->setAddress($address) ->buildClient(); $repository->save($client); $client->getId(); 

Благодарю за внимание!

P.S.:

Прошу не судить слишком строго, «чукча не писатель, чукча читатель». Для более опытных разработчиков описываемые вещи могут показаться банальными, я же к описанному пришел не сразу, но когда применил описанный подход, он зарекомендовал себя отлично.

Опыт разработки у меня относительно не большой — четыре года, DDD применял пока только на одном проекте.

Буду благодарен за отзывы и конструктивные замечания.

Ссылки:
  1. Эванс Э., «Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем.»
  2. Вернон В., «Реализация методов предметно-ориентированного проектирования.»
  3. М. Фаулер, Value Object
  4. М. Фаулер, Constructor Initialization
  5. Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидс, «Приёмы объектно-ориентированного проектирования. Паттерны проектирования.»
  • domain-driven design
  • design patterns
  • anemic domain model
  • rich domain model
  • code complete
  • mysql
  • php
  • ооп

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *