2010-05-03 2 views
4

나는이처럼 보이는 모델을 가지고 :DDD 및 법인 자료, 모델 사용하여 여러 정체성 유형

public interface IEntity 
{ 
    int Id { get; set; } 
} 

그런 생각이 내 기관이 인터페이스에서 상속하는 것입니다 : 그러나

public class User : IEntity 
{ 
    public int Id { get; set; } 
} 

내 엔티티 중 하나는 실제로 GUID를 식별자로 사용합니다.

public class UserSession 
{ 
    public Guid Id { get; set; } 
} 

정말 동일한 인터페이스에서 상속 내 모든 엔티티를하고자하지만 그 GUID를 식별하기 때문에 불필요한있는 사용자 세션의 정수 기반의 ID 열을 추가하는 저를 강제하지만 도메인 모델을 유지하는 것 모든 엔티티가 동일한 기반에서 상속 받기 때문에 좋습니다.

이 시나리오에서 어떤 옵션이 있습니까? int를위한 인터페이스와 Guid를위한 인터페이스 중 하나를 기본 인터페이스로 사용할 수 있습니까? 불필요하지만 UserSession 엔터티에 ID 열을 추가해야합니까? 내가 그것을 없애고 정수로 대체 할 수 없도록 Guid가 필요하다.

모범 사례에 대한 의견이 있으십니까?

답변

3

모든 IE에서 동일한 IEntity 인터페이스를 구현할 수 있지만 각 ID 필드에는 다른 유형이 있습니다.

제네릭 입력 ..

이렇게 인터페이스를 정의하십시오.

public interface IEntity<T> 
{ 
    T Id { get; set; } 
} 

당신의 기업에 대한 인터페이스를 구현

..

public class User : IEntity<int> 
{ 
    public int Id { get; set; } 
} 


public class UserSession : IEntity<Guid> 
{ 
    public Guid Id { get; set; } 
} 
+0

아주 좋은의 ID를 쿼리하지 않고 AJAX에 삽입의 결과를 표시 ! 감사! – Thomas

+0

리포지토리 기본 인터페이스에서 어떻게 구현할 수 있습니까? 그것은 : public interface IRepository TEntity : IEntity – Thomas

+2

당신은 매우 좋은 디자인 선택이 아닌 TEntity와 TEntityKey의 저장소를 만들어야합니다. 왜 IEntity에 Id 필드가 있어야합니까? –

1

하면이

public interface IEntity<T> 
{ 
    T Id { get; set; } 
} 

public abstract class BaseEntity<T, U> 
{ 
    U _id; 
    public U Id 
    { 
     get { return _id; } 
     set { _id = value; } 
    } 
} 

그리고

public class Person : BaseEntity<Person,int> 
{ 
    string _firstName; 
    string _lastName; 

    public string FirstName 
    { 
     get { return _firstName; } 
     set { _firstName = value; } 
    } 

    public string LastName 
    { 
     get { return _lastName; } 
     set { _lastName = value; } 
    } 
} 

또는

시도
public class City: BaseEntity<City,Guid> 
{ 
    string _name; 

    public string Name 
    { 
     get { return _name; } 
     set { _name = value; } 
    } 

}  
0

엔티티를 식별 할 때는 항상 Guid를 사용하십시오.

GUID를 일괄까지 명령까지 당신을 자유롭게하는, 그들이 클라이언트에서 생성 될 수 있다는 점에서의 int에 비해 상당한 장점을 가지고, 등