Реализация класса Объекта DDD в C#

Я теперь начинаю на DDD, я уже нашел хорошую реализацию для ValueObject, но я, может казаться, не нахожу хорошей реализации для Объектов, я хочу универсальный основной тип объекта, который будет иметь идентификатор (необходимым спецификации) и реализует currect операции равенства.

Каково самое изящное решение?

8
задан MindFold 24 February 2010 в 13:27
поделиться

3 ответа

Единственная характеристика Сущности - то, что она имеет долгоживущую и (полу) постоянную идентичность. Вы можете инкапсулировать и выразить это, реализовав IEquatable . Вот один из способов сделать это:

public abstract class Entity<TId> : IEquatable<Entity<TId>>
{
    private readonly TId id;

    protected Entity(TId id)
    {
        if (object.Equals(id, default(TId)))
        {
            throw new ArgumentException("The ID cannot be the default value.", "id");
        }

        this.id = id;
    }

    public TId Id
    {
        get { return this.id; }
    }

    public override bool Equals(object obj)
    {
        var entity = obj as Entity<TId>;
        if (entity != null)
        {
            return this.Equals(entity);
        }
        return base.Equals(obj);
    }

    public override int GetHashCode()
    {
        return this.Id.GetHashCode();
    }

    #region IEquatable<Entity> Members

    public bool Equals(Entity<TId> other)
    {
        if (other == null)
        {
            return false;
        }
        return this.Id.Equals(other.Id);
    }

    #endregion
}
18
ответ дан 5 December 2019 в 07:58
поделиться

Для реализации корректных операций равенства я рекомендую взглянуть на базовый класс объектов домена в Sharparchitecture - https://github.com/sharparchitecture/Sharp-Architecture/blob/ master / Solutions / SharpArch.Domain / DomainModel / EntityWithTypedId.cs . В нем реализована вся необходимая функциональность. И взгляните на другой код, ИМО, он будет очень полезен для вас и вашего дела.

3
ответ дан 5 December 2019 в 07:58
поделиться

Я не уверен, что вам нужна конкретная библиотека/пример кода или руководство. Хорошее решение DDD будет использовать фабрику для инстанцирования, постоянство отделено от модели домена (большинство ORM имеет тенденцию связывать эти два понятия вместе), четко определяет границу домена, принудительное использование полей и операций через интерфейс.

Я бы очень рекомендовал книгу "Применение DDD и паттернов" Джимми Нильсона. В ней подробно рассказывается о DDD и лучших практиках. Примеры также на C#, что подойдет для вашего проекта.

0
ответ дан 5 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: