저는 DDD를 시작했습니다. ValueObject에 대한 좋은 구현을 이미 찾았지만 엔티티에 대한 좋은 구현을 찾지 못하는 것 같습니다. 일반적인 기본 엔터티 유형이 필요합니다. ID (명세에 의해 필요함)와 currect equality operations을 구현한다.C#에서 DDD 엔터티 클래스 구현하기
가장 훌륭한 솔루션은 무엇입니까?
저는 DDD를 시작했습니다. ValueObject에 대한 좋은 구현을 이미 찾았지만 엔티티에 대한 좋은 구현을 찾지 못하는 것 같습니다. 일반적인 기본 엔터티 유형이 필요합니다. ID (명세에 의해 필요함)와 currect equality operations을 구현한다.C#에서 DDD 엔터티 클래스 구현하기
가장 훌륭한 솔루션은 무엇입니까?
엔티티의 유일한 특성은 수명이 오래되고 (준) 영구적 인 특성입니다. IEquatable<T>
을 구현하여 캡슐화하고 표현할 수 있습니다. - https://github.com/sharparchitecture/Sharp-Architecture/blob/master/Solutions/SharpArch.Domain/DomainModel/EntityWithTypedId.cs 올바른 평등 작업의 구현을 위해
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
}
내가 Sharparchitecture에서 도메인 엔티티의 기본 클래스에 대한보고를하는 것이 좋습니다 : 여기 한 가지 방법이다. 그것은 모든 필수 기능의 구현을 가지고 있습니다. 그리고 IMO에서 다른 코드를 살펴보십시오. 여러분과 여러분의 경우에 매우 유용 할 것입니다.
특정 라이브러리/샘플 코드 또는 가이드 라인을 따른다면 확실하지 않습니다. 좋은 DDD 솔루션은 인스턴스화, 도메인 모델과 분리 된 지속성 (대부분의 ORM은 둘을 함께 묶는 경향이 있음), 도메인 경계를 명확하게 정의하고, 인터페이스를 통해 필드 및 작업을 시행하도록 factory를 사용합니다.
Jimmy Nilson의 DDD 및 패턴 적용 책을 강하게 권합니다. DDD 및 모범 사례에 대해 자세히 설명합니다. 예제는 프로젝트에 적합한 C#에도 있습니다.
반영구적으로 무엇을 의미합니까? – vorou
+1. 대형 앱의 일반적인 접근 방식입니까? 제가 오늘 질문 한 질문은 Entity 기본 클래스 접근법에 대한 비판을 불러 모으고 있습니다 : https://softwareengineering.stackexchange.com/questions/364870/should-i-handle-all-nine-comparisons?noredirect=1#comment794683_364870. 그러나, 그것은 우리를 위해 아주 잘 작동합니다. 그것은 의견 중 하나에서 빈혈로 묘사되었다. – w0051977
@ w0051977 오늘은 그렇게 쓰지 않을 것입니다. Entity의 특성은 동일한 ID를 가진 경우 동일한 Entity이지만, Equals의 구현은 실제 코드 기반에서는 도움이되지 않는다는 것이 사실입니다. –