我正在使用 spring 框架和谷歌应用引擎开发一个 web 应用程序。我想知道是否有一种设计模式或框架可以帮助我将应用程序的功能开发为可插拔模块。例如,我已经确定了应用程序的 4 个功能:
- 认证登录
- 用户资料管理
- 用户组创建
- 用户文件管理
现在我需要将所有这些功能开发为独立的模块,这样我就可以动态地分离它们中的任何一个,并且它们尽可能松散耦合。他们可以拥有自己的数据库实现,自己的技术集等。是否有设计原则以这种方式实现模块。
我正在使用 spring 框架和谷歌应用引擎开发一个 web 应用程序。我想知道是否有一种设计模式或框架可以帮助我将应用程序的功能开发为可插拔模块。例如,我已经确定了应用程序的 4 个功能:
现在我需要将所有这些功能开发为独立的模块,这样我就可以动态地分离它们中的任何一个,并且它们尽可能松散耦合。他们可以拥有自己的数据库实现,自己的技术集等。是否有设计原则以这种方式实现模块。
您应该将该功能拆分为两个组件: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 文件轻松替换实现。你的网络应用是完全解耦的,对实现细节一无所知,它只依赖于接口。
你可以看看 MQ 系统(例如 RabbitMQ、ActiveMQ)。MQ 系统将作为中间层,为您提供松散耦合。模块之间的通信将实现为将消息发布到队列并监听发布。
此外,OSGI 可能会对您有所帮助。它使您可以将您的应用程序作为一组可插入的模块,这些模块可以动态加载。
根据我的经验,我建议使用 MVC 模式。用于Servlet filtters
1.Oauth 登录。2.用户配置文件管理 3.用户组创建 4.用户文件管理根据您的要求创建服务/POJO来实现和相互注入
如果您了解 Spring AOP,请使用。这样您就可以在第 2、3 和 4 点的实现之间实现更动态的集成。