2014-12-01 6 views
1

저는 스프링 프레임 워크와 Google 응용 프로그램 엔진을 사용하여 웹 응용 프로그램을 개발 중입니다. 나는 플러그인 패턴으로 내 응용 프로그램의 기능을 개발할 수있는 도움을 받아 디자인 패턴이나 프레임 워크가 있는지 궁금합니다. 예를 들어 나는 응용 프로그램의 4 개 기능을 확인했다 :여러 기능 모듈로 웹 응용 프로그램을 개발하는 방법

  1. 의 Oauth 로그인을
  2. 사용자 프로필 관리
  3. 사용자 그룹 생성

지금 내가 필요한 것을 개발하는 사용자 파일 관리 이러한 모든 기능을 독립적 인 모듈로 제공하므로 어떤 모듈도 동적으로 분리 할 수 ​​있으며 가능한 한 느슨하게 결합되어 있습니다. 그들은 자신의 데이터베이스 구현, 자신의 기술 집합 등을 가질 수 있습니다. 그런 방식으로 모듈을 구현하는 설계 원칙이 있습니까?

+0

유용한 답변을 찾았습니까? 당신은 [답변 수락] (http://stackoverflow.com/help/someone-answers) 또는/및 [vote it up] (http://stackoverflow.com/help/why-vote)하실 수 있습니다. – retroq

답변

0

MQ 시스템 (예 : RabbitMQ, ActiveMQ)을 살펴볼 수 있습니다. MQ 시스템은 느슨하게 커플 링을 제공하는 중간 계층으로 작동합니다. 모듈 간 통신은 대기열에 게시하고 게시를 수신하는 게시 메시지로 구현됩니다.

또한 OSGI가 도움이 될 수 있습니다. 동적으로로드 될 수있는 플러그 가능한 모듈 집합으로 응용 프로그램을 만들 수 있습니다.

+0

예, 전에 OSGi에 대해 읽었습니다. 그러나 복잡한 라이브러리처럼 보이고 추가 OSGi 컨테이너를 소개합니다. 나는 MQ를 시도 할 것이다.또한 OSGi 또는 OSGi의 봄 응용 프로그램 예제를 기반으로 한 디자인 패턴 예제를 제공 할 수 있습니다 – saurabhgupta05085

+0

@ saurabhgupta05085 [공식 참조] (http://docs.spring.io/spring-osgi/docs/current/reference/html /) – retroq

0

내 경험에 비추어 볼 때 MVC 패턴 사용을 제안합니다. 1.Oauth 로그인은 Servlet filtters을 사용하십시오. , 사용을 구현하고 스프링 AOP를 알고있는 경우 2. 사용자 프로필 관리 3.User 그룹 생성 4. 사용자의 파일 관리

에 대한 귀하의 요구 사항에 따라 서로를 주입하는 서비스/POJO를 만들기. 점 2,3 및 4 구현 간의 동적 통합을 구현할 수 있습니다.

0

API와 구현의 두 가지 구성 요소로 기능을 분할해야합니다. 첫 번째 인터페이스는 인터페이스를 포함하고 두 번째 인터페이스는 구현을 포함합니다. 웹 응용 프로그램 컨트롤러에 인터페이스를 전달하고 Spring 또는 다른 Dependency Injection 프레임 워크를 통해 구현을 주입합니다. 예를 컴포넌트로 구현에서 웹 응용 프로그램을 분리하는 인터페이스를 정의

@Component 
public class UserController { 
    private FileManager fileManager; 

    @Autowired 
    public UserController(FileManager fileManager) { 
     this.fileManager = fileManager; 
    } 

    @GET("/user/{userId}/file/{fileId}") 
    public File getUserFile(long userId, long fileId) { 
     fileManager.getUserFile(userId, fileId); 
    } 
} 

파일 MGT-API를 클라이언트와 대리인의 요청을 처리

웹 응용 프로그램, UserController를 들어

public interface FileManager { 
    File getUserFile(long userId, long fileId); 
} 

file-mgt-impl 여기서 요청 된 파일을 얻는 방법에 대한 모든 세부 정보

@Component 
public class FileManagerImpl implements FileManager { 
    @Override 
    public File getUserFile(long userId, long fileId) { 
     // get file by id from DB 
     // verify that provided user is the file owner 
     // do other useful stuff 
     // return the file or throw exception if something wrong 
    } 
} 

그룹, 프로필 관리 및 기타 기능에 대해 동일한 작업을 수행하십시오. 그 후에는 단일 jar 파일을 대체하여 구현을 쉽게 바꿀 수 있습니다. 귀하의 웹 응용 프로그램은 완벽하게 분리되어 구현 세부 사항에 대해 아무것도 모릅니다. 인터페이스에만 의존합니다.