Подтвердить что ты не робот

В чем разница между объектами домена, POCOs и сущностями?

У меня сложилось впечатление, что все они в основном одинаковы. Являются ли объекты модели одинаковыми?

Сейчас, в моей архитектуре, я:

class Person 
{

    public string PersonId;        
    public string Name;
    public string Email;

    public static bool IsValidName() { /* logic here */ }
    public static bool IsValidEmail() { /* logic here */ }
}


class PersonService
{
    private PersonRepository pRepository;

    PersonService()
    {
        pRepository = new PersonRepository();
    }

    public bool IsExistingEmail(string email)
    {
        //calls repo method to see if email is in db
    }


    public Person GetPerson(email)
    {
        return pRepository.Get(email);
    }


    public void SavePerson(Person p)
    {
        if (Person.IsValidEmail(p.Email) && !IsExistingEmail(p.Email)
        {
            pRepository.Save(p);
        }
    }

}


class PersonRepository
{
    public void Save(Person p)
    {
        //save to db
    }

    public Person Get(string email)
    {
        //get from db
    }

    public bool IsExistingEmail(string email)
    {
        //see if email in db
    }

}

Итак, какой из перечисленных классов POCO, Domain Object, Model object, entity?

4b9b3361

Ответ 1

Мои (нестандартные) определения Layman

  • POCO - Обычный Старый% Insert_Your_Language% Объект. Тип, в котором нет логики. Он просто хранит данные в памяти. Обычно вы видите в нем только свойства auto, иногда поля и конструкторы.
  • Domain object экземпляр класса, связанного с вашим доменом. Я бы, вероятно, исключил любые объекты спутников или служебных объектов из объекта домена, например. в большинстве случаев объекты домена не включают такие вещи, как ведение журнала, форматирование, сериализация, шифрование и т.д. - если вы специально не создаете продукт для регистрации, сериализации, форматирования или шифрования соответственно.
  • Model object Я думаю, что это то же самое, что Domain object. Люди склонны использовать это взаимозаменяемо (я могу ошибаться)
  • Entity класс, который имеет id
  • Repository класс, который говорит с хранилищем данных с одной стороны (например, с базой данных, службой данных или ORM) и с сервисом, пользовательским интерфейсом, бизнес-уровнем или любым другим запрашивающим органом. Он обычно скрывает все данные, связанные с данными (например, репликация, объединение пулов, ограничения ключей, транзакции и т.д.) И упрощает работу с данными
  • Service программное обеспечение, которое обеспечивает некоторую функциональность, как правило, через открытый API. В зависимости от уровня это может быть, например, автономный контейнер RESTful или класс, который позволяет вам найти конкретный экземпляр требуемого типа.

Оригинальный ответ

Это terms, которые в основном используются в (распределенном) проекте Driven Driven Design. Они не одинаковы. Термин model Object может использоваться как синоним объекта домена.

Объекты домена. Объекты из области бизнеса, которые представляют что-то значимое для эксперта домена. Объекты домена в основном представлены объектами и объектами ценности. Говоря об общем языке, большинство объектов, которые живут в доменном слое, вносят вклад в модель и являются объектами домена.

Entity. Объект, фундаментально определяемый не его атрибутами, а потоком непрерывности и идентичности. (Значение должно иметь Id)

POCO. Простой объект без сложной логики, который не требует идентификации, обычно он имеет всего несколько свойств и используется с ORM или как объект передачи данных

class Person - Entity и POCO, экземпляр этого класса - Object Object
class PersonService - Сервис
class PersonRepository - Репозиторий

Ответ 2

Это скорее коннотация функции; объект домена является чем-то специфичным для вашей логической реализации и может быть более сложным, чем простой POCO; сущность имеет коннотацию, чтобы представлять что-либо (обычно в отношении носителя постоянства), а POCO - просто быстрый идентификатор для класса. Модель - это просто термин, используемый для представления объекта (обычно содержащего состояние и обычно имеющего дело с пользовательским интерфейсом или БД).

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

Ответ 3

в основном это сводится к внутренней логике

  • Объекты домена имеют внутренние логические вещи домена, такие как проверка и т.д.
  • Модель - это в основном легкий объект Domain, они знают о данных, которые они хранят, но ничего не знают о том, как это будет использоваться
  • Объекты хранят данные и имеют некоторые внутренние знания о том, откуда они пришли, и где они собираются сохранять, обновлять и т.д.
  • POCO хранит данные и может иметь некоторые внутренние знания об этом, такие вещи, как то, что является общей стоимостью всех элементов в коллекции свойств.
  • DTO - самый простой элемент для всех, он просто хранит данные и не имеет логики

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

в соответствии с вашим примером кода Класс Person будет объектом домена или моделью, остальные 2 - службой и репозиторием. Объекты домена, Pocos, модели, dtos и т.д. Используются как сообщения, передаваемые от одного уровня к другому, класс обслуживания, такой как PersonService, является слоем в приложении и тем же самым с классом репозитория, как PersonRepository. для хорошего просмотра взгляните на http://bob-the-janitor.blogspot.com/2009/07/n-tier-design-revisit-part-1-over-view.html, в этом случае он говорит об использовании объекта данных, который в основном является dto

Ответ 4

В ответах выше уже есть хорошие объяснения Домена и Модели.

В объекте "Контекст базы данных" означает "Элемент" в "Модель отношения сущностей ERD" . (т.е. строка в таблице)

В Microsoft-Dotnet-EntityFramework-World Entity означает объект, который может быть загружен из базы данных и сохранен в базе данных с использованием контекста Data (Base). Обычно Сущность не может существовать без Контекста данных (Базы). (Unit-) Тестирование бизнес-функциональности этих классов затруднено.

Pocos (Обычные старые объекты CommonRuntime) могут существовать без PersistenceFramework (EntityFramework или NHibernate), поэтому их гораздо легче проверить.

Слово poco - это адаптация pojo (простой старый Java-объект), который был создан в мире Java по той же причине.

Ответ 5

Просто подсказка дизайна.

Вместо использования:

class PersonService
{
    private PersonRepository pRepository;

    PersonService()
    {
        pRepository = new PersonRepository();
    }
}

Использование:

class PersonService
{
    private PersonRepository pRepository;

    PersonService(PersonRepository pRepository)
    {
        this.pRepository = pRepository;
    }
}

Чтобы обеспечить инъекцию зависимостей в PersonService.

Ответ 6

Объект домена является объектом на уровне домена вашего приложения, например. класс адреса. "Модель" означает одно и то же - объект в "Модель домена".

POCO (простой старый объект CLR) - это объект, который не имеет определенного поведения (методов) и содержит только данные (свойства). POCO обычно используются как DTO (объекты передачи данных) для переноса данных между уровнями, а затем данные обычно используются для заполнения объекта/объекта домена.