다음과 같은 인터페이스를 구현해야 내 응용 프로그램의 모든 엔티티 클래스에 공통 회원을 얻기. 그러나 ID가 복합 ID 일 수있는 경우를 처리해야합니다. 예 : 지금의 엔티티 인스턴스 (종류를 알 수없는 경우) 내가 ID를 검색하여 문자열로 변환 할 필요가 주어진는 일반 인터페이스
public class User : IEntity<int> {
public int Id { get; set; }
...
}
public class Site : IEntity<int> {
public int Id { get; set; }
...
}
public class UserSite : IEntity<UserSiteIdentifier> {
public UserSiteIdentifier Id { get; set; }
...
}
// Note: IIdentifier doesn't have any members
public class UserSiteIdentifier : IIdentifier {
public User User { get; set; }
public Site Site { get; set; }
...
public override ToString() {
return User.Id + "|" + Site.Id;
}
}
: 나는 다음과 같은 구현을 가질 수있다. 나는 말할 수있다 :
object entity = ???;
string id;
if (entity is IEntity<int>)
id = ((IEntity<int>)entity).Id.ToString();
else if (entity is IEntity<IIdentifier>)
id = ((IEntity<IIdentifier>)entity).Id.ToString();
그러나이 코드는 단지 거의 동일한 코드를 반복적으로 처리해야만 복합 ID를 처리 할 수 있기 때문에 나와 함께 앉지 않는다.
누군가가 내게 더 깨끗한 해결책을 제시 할 수 있으면 감사히 생각합니다. 이 응용 프로그램은 여전히 프로토 타입이며 제안 사항에 완전히 열려 있습니다. 같은 값을 반환 해야하는 두 가지 속성을 구현하면서
이public interface IEntity<T>:IEntity {
new T Id { get; set; }
}
public interface IEntity {
object Id { get; }
}
일부 불편이있을 것이다 그러나 이것은 object Id
을 숨 깁니다 기본 클래스 Entity<T>
을 도입함으로써 극복 할 수있다 : 감사
은 왜 그냥 entity.ToString()를 사용? – looper
@looper 감사하지만 객체가 IEntity을 구현하는지 확인해야합니다. –
nfplee
'UserSiteIdentifier'가'IIdentifier'인데도 IEntity가'IEntity '이라고 결론 내릴 수는 없습니다. 그러면'IEntity '인터페이스가'T' **에서 공 변 ('out') 될 것입니다. 그것은 IEntity 을 만들 수 없습니다. setter도 언급하기 때문입니다. setter는 in-parameter로서'T'를 취하는 메소드와 같습니다. 제가 말하고자하는 것은 위의 'else if'조건이 효과가 있다고 생각하지 않는다는 것입니다. –