我正在使用spring框架和谷歌应用引擎开发一个Web应用程序。我想知道是否有一个设计模式或框架的帮助我可以开发我的应用程序的功能作为可插拔模块。例如,我已经确定了该应用程序的4个功能:
现在我需要的是将所有这些功能开发为独立模块,这样我就可以动态地分离它们中的任何一个,并且它们尽可能松散地耦合。他们可以拥有自己的数据库实现,他们自己的技术集等。是否有设计原则以这种方式实现模块。
答案 0 :(得分:0)
您可以查看MQ系统(例如RabbitMQ,ActiveMQ)。 MQ系统将作为中间层工作,为您提供松散耦合。 模块之间的通信将实现为将消息发布到队列和监听发布。
此外,OSGI可能会帮助您。它使您可以将应用程序作为一组可插拔模块,可以动态加载。
答案 1 :(得分:0)
根据我的经验,我建议,使用MVC模式。使用Servlet filtters
进行1.Oauth登录。
根据您的要求创建服务/ POJO以实现和注入
2.用户档案管理
3.用户组创建
4.用户文件管理
如果您了解Spring AOP,请使用。这样您就可以在点2,3和4的实现之间实现更加动态的集成。
答案 2 :(得分:0)
您应该将功能拆分为两个组件:API和实现。第一个包含接口,第二个包含接口。您将接口传递给Web应用程序控制器并通过Spring或任何其他依赖注入框架注入实现。例如
web-app,UserController,处理来自客户端的请求并委托给您的组件
@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);
}
}
file-mgt-api,您可以在其中定义接口以将web-app与实现分离
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文件轻松替换实现。您的网络应用程序完全脱离,并且对实现细节一无所知,只取决于接口。