문제

도메인 객체 공장에 기본적으로 인터페이스를 사용하는 것이 합리적입니까, 아니면 필요할 때만 공장 클래스에 인터페이스를 예약해야합니까?

public IUserFactory
{
    User CreateNewUser();
}

public UserFactory : IUserFactory
{
    public User CreateNewUser()
    {
        return new User();
    }
}
도움이 되었습니까?

해결책

다음은 동일한 문제를 Java로 번역 한 것입니다.

원래 예

public interface UserFactoryIF
{
   User createNewUser();
}

그런 다음 공장의 구현

public class UserFactory implements UserFactoryIF
{
     public User createNewUser()
     {
         // whatever special logic it takes to make a User
         // below is simplification
         return new User();
     }
}

중앙 집중식 생산자를위한 단일 인터페이스를 정의하기 때문에 공장의 인터페이스를 정의하는 데 특별한 이점이 없습니다. 일반적으로 동일한 종류의 제품의 다양한 구현을 생산해야하며 공장은 다양한 종류의 매개 변수를 소비해야합니다. 즉, 우리는 다음과 같습니다.

public interface User
{
    public String getName();
    public long getId();
    public long getUUID();
    // more biz methods on the User
}

공장은 다음과 같습니다.

public class UserFactory {

    public static User createUserFrom(Person person) {
        // ...
        return new UserImpl( ... );
    }

    public static user createUserFrom(AmazonUser amazonUser) {
         // ... special logic for AmazonWS user
        return new UserImpl( ... );          
    }

    private static class UserImpl implements User {
       // encapsulated impl with validation semantics to
       // insure no one else in the production code can impl
       // this naively with side effects
    }
}

이것이 요점을 가로 지르기를 바랍니다.

다른 팁

주어진 예에서, 나는 당신이 왜 공장으로 가야하는지조차 알지 못합니다.

공장 패턴의 본질은 "객체 생성을위한 인터페이스를 정의하지만 서브 클래스가 인스턴스화 할 클래스를 결정하게하는 것입니다. 공장 방법을 사용하면 클래스가 서브 클래스로 인스턴스화를 연기 할 수 있습니다." - 위키 백과

다른 유형의 사용자가 있습니까? 아니면 사용자 자체가 무언가의 유형입니다. 당신이 그 일을 명확하게 정교하게하지 않았을 수도 있습니다. 우리는 보통 사용합니다 상호 작용 안에 추상 공장 방법 패턴, 우리는 여러 가족의 관련 대상을 처리 해야하는 곳입니다.

참고 : 잊지 마십시오. 패턴이 우리를 돕기 위해 패턴이 있다는 것은 우리가 필요하든 말든 사용할 수 있기 때문에 사용해야한다는 의미는 아닙니다.

모든 것이 인터페이스를 가질 필요는 없습니다. 단일 구현이 있고 다른 이유가 없다면 인터페이스를 정의하는 이유를 알 수 없습니다.

두 가지 : (1) 인터페이스를 만들기 전에 대체 구현을 필요로 할 때까지 기다릴 때까지 기다렸다가 (또는 2) 인터페이스가 거의 항상 단위 테스트, 특히 조롱으로 더 쉬워 지므로 자주 온다. 인터페이스가 바로 필요합니다.

인터페이스에서 공장을 작성하여 모의 클래스로 테스트 할 수 있으며 IOC 응용 프로그램을 사용하는 것이 더 간단하게 만들어 지므로 응용 프로그램 기능을 위해 반드시 필요하지는 않지만 일반적으로 인터페이스를 통해 대부분의 클래스를 빌드하고 호출합니다. .

단위 테스트 나 IOC 패턴 (종교적 의견을 제외하고)을 고려하지 않는다면 아마도 귀찮게하지 않을 것입니다.

비주얼 스튜디오에서 사용하는 데있어 가장 큰 고통은 적어도 속성이나 기능에 대한 '정의로 이동'이 클래스 정의가 아니라 인터페이스 정의로 점프한다는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top