코드베이스의 일부는 다음과 같은 스타일로 작성되었습니다.
// IScheduledTask.cs
public interface IScheduledTask
{
string TaskName { get; set; }
int TaskPriority { get; set; }
List<IScheduledTask> Subtasks { get; set; }
// ... several more properties in this vein
}
// ScheduledTaskImpl.cs
public class ScheduledTaskImpl : IScheduledTask
{
public string TaskName { get; set; }
public int TaskPriority { get; set; }
public List<IScheduledTask> Subtasks { get; set; }
// ... several more properties in this vein,
// perhaps a constructor or two for convenience.
}
즉, 자동 속성으로이를 구현하는 유일한 해당 구현으로 각각 동작이없는 속성 세트 만 지정하는 많은 인터페이스가 있습니다. 이 코드는 상당히 상급자 (나 자신보다 훨씬 많은 사람)에 의해 작성되었으며 합리적인 절차 적 코드 인터페이스 사용과는 별개입니다. 다른 사람 이이 스타일을 만났거나 사용했는지, 인터페이스없이 어디서나 구체적인 DTO를 사용하는 것보다 이점이 있는지 궁금합니다.
1
내가 한 한 가지 이유는 COM 호환성 때문이지만 여기서는 귀하의 이유가 아닌 것 같습니다.
—
Mike
@Mike Interesting, 나는 COM을 사용한 적이 없으며 여기서 사용되지 않습니다. 이 코드 섹션의 작성자에게 그가 COM을 사용할 계획인지 아니면 다른 것을 사용할 것인지 물을 것입니다.
—
walpen
내 생각에 그는 비교적 가까운 미래에 그 속성 중 하나 이상을 자동이 아닌 것으로 만들 것으로 예상하고 처음 에이 상용구를 작성하는 것은 나중에 주변에서 시간을 절약하기 위해 얻은 습관입니다. C # 사람이 아니므로 내가 말할 수있는 전부입니다.
—
Ixrec
IMHO 그것은 구현이 아닌 인터페이스에 대한 코드 의 과도한 집착과 오용입니다 . 핵심적인 이야기는 유일한 구현 입니다. 인터페이스의 요점은 다형성이지만 속성 전용 클래스는 단순히 다른 값을 가짐으로써 다형성입니다. 동작 (메소드)을 사용하더라도 단일 구현이 주어지면 아무런 의미가 없습니다. 이 넌센스는 코드 전체에 적용되며 유지 관리를 방해합니다. 왜, 무엇을, 어디에서 묻는 지 너무 많은 시간을 낭비합니다. 왜 그렇게했는지, 내가 보지 못한 디자인은 무엇이며, 다른 구현은 어디에 있습니까?
—
radarbob
선행 의견의 대부분은 조기 추상화의 단일 코드 "코드 냄새"에 적용됩니다. 그러나 여기에 빈혈 도메인 모델 "코드 냄새"가 있습니다. 다음을 참조하십시오 : martinfowler.com/bliki/AnemicDomainModel.html
—
Erik Eidt