프로젝트 에 따라 디자인 모델 (3): 공장 모델

이 어 프로젝트 발표 후 새로운 수요 가 몰 려 왔 습 니 다. 많은 모듈 을 추가 하려 면 급히 접속 해 야 할 것 이 있 고 통합 중인 것 이 있 습 니 다.
일부 새로 추 가 된 모듈 은 새로운 인터페이스 가 필요 합 니 다. 예 를 들 어 계산서 모듈 을 추가 하고 보고 서 를 만 드 는 인터페이스 가 필요 합 니 다. 이 때문에 IProduct 에 이 새로운 인 터 페 이 스 를 추가 해 야 합 니 다. 간단 한 공장 에서 인터페이스 IProduct 에 대한 수정 은 치 명 적 입 니 다. IProduc 를 수정 하 는 것 은 모든 제품 류 를 수정 하 는 것 을 의미 하기 때 문 입 니 다. 모든 제품 류 가 IProduc 인 터 페 이 스 를 실현 하기 때 문 입 니 다.다른 모듈 에 빈 방법 을 추가 해 야 합 니 다.이런 방식 은 분명히 용납 할 수 없 는 것 이다.
우 리 는 적어도 개폐 원칙 을 만족 시 킬 수 있 는 디자인 모델 로 우리 의 유 고 를 재 구성 해 야 한다. 그것 이 바로 공장 모델 이다.
이것 은 이전의 제품 인터페이스 이다.
    public interface IProduct
    {
        bool Add(BaseEntity entity);
        bool Del(string id);
        bool Edit(string id);
        bool Select(string id);
        IList GetEntitys();
        IList GetEntitys(int pageIndex,int pageSize,out int totalCount);
    }

우 리 는 제품 을 모듈 (UserDal, GoodsDal, History Dal) 에 따라 분류 합 니 다. 지금 우 리 는 세 개의 인터페이스 파일 이 있 습 니 다. 수요 에 따라 서로 다른 방법 을 포함 합 니 다. 예 를 들 어 로 그 는 추가 와 조회 만 필요 하고 상품 은 삭제 하고 페이지 별로 검사 해 야 합 니 다.
    public interface IUserDal
    {
        bool Add(BaseEntity entity);
        bool Del(string id);
        bool Edit(string id);
        bool Select(string id);
        IList GetEntitys();
    }

    public interface IGoodsDal
    {
        bool Add(BaseEntity entity);
        bool Del(string id);
        bool Edit(string id);
        bool Select(string id);
        IList GetEntitys(int pageIndex, int pageSize, out int totalCount);
    }

    public interface IHistoryDal
    {
        bool Add(BaseEntity entity);
        IList GetEntitys(int pageIndex, int pageSize, out int totalCount);
    }

각자 의 제품 류 는 자신의 인터페이스 만 실현 하면 됩 니 다. 개폐 원칙 에 부합 되 고 새로운 모듈 을 추가 하 며 예전 의 모듈 을 수정 할 필요 가 없습니다.현재 의 곤경 을 완벽 하 게 해결 했다.
간단 한 공장 은 공장 류 호출 매개 변 수 를 알 아야 한다. 간단 한 공장 은 하나의 제품 인터페이스 만 있 고 제품 인터페이스 와 제품 은 1 대 다 의 관계 이기 때문에 하나의 공장 류 만 있 으 면 모든 대상 을 얻 을 수 있다.공장 모델 은 1 대 1 의 관계 이기 때문에 이곳 의 제품 인 터 페 이 스 는 매개 변수 이자 공장 이다.
매개 변수 로 삼 으 면 각 제품 에 공장 을 추가 해 야 하고 사이트 에서 각 공장 의 이름 을 알 아야 호출 할 수 있 습 니 다.
공장 이 라 고 생각하면 주입 에 의존 하 는 것 이 있 지 않 습 니까? 대상 은 IOC 에 등록 되 어 있 습 니 다. 사이트 쪽 에서 각 인터페이스의 이름 을 알 아야 호출 할 수 있 습 니 다.IOC 를 사용 하 세 요. 코드 양 을 많이 절약 할 수 있 습 니 다.좋 은 디자인 인 것 같은 데.
시행 을 시작 한 후 새로운 수요, 라 이브 러 리 이쪽 은 곧 개발 이 끝 났 지만 개발 진 도 는 한때 사이트 개발 쪽 에 걸 렸 다.
계속
 

좋은 웹페이지 즐겨찾기