Green-forest 框架入门






4.85/5 (4投票s)
Green-forest 框架的介绍,用于创建一个 Web 应用程序示例。
引言
Green-forest 框架是一个简单的 IoC 容器,具有 Action-Handler 架构。它不是 Spring Framework 或 JEE 的竞争对手,但它可以为这些框架提供强大的补充。您可以将 Green-forest 用于单个类实现或复杂的业务逻辑。
Action-Handler 架构可以用以下方案表示
如方案所示,我们将逻辑划分为一些类
操作
Handler
框架
Action 类表示一个“原子业务方法”,包含输入和输出数据
//Action with String input and Integer output data
public class SomeAction extends Action<String, Integer>{
public SomeAction(String input) {
super(input);
}
}
Handler 类表示业务逻辑的实现
@Mapping(SomeAction.class)
public class SomeHandler extends Handler<SomeAction>{
@Inject
SomeService service;
public void invoke(SomeAction action) throws Exception {
String input = action.getInput();
Integer result = service.doSomeWork(input);
action.setOutput(result);
}
}
框架的引擎确保处理程序的运行
//create Engine instance
Engine engine = new Engine();
//register the handler
engine.putHandler(SomeHandler.class);
//invoke the action
Integer result = engine.invoke(new SomeAction("some data"));
动机
使用 Green-forest 框架的动机是什么?主要任务是简化代码:将一个大的类(某些服务实现)转换为一组小的类(处理程序)。
请看这个例子:“经典”实现表示一个包含 1000 行代码的大类
//"classic" impl of API
public class SomeBigServiceImpl implements SomeService {
public Doc createDoc(...){...}
public Doc createDocWithAttach(...){...}
public Doc getDocById(...){...}
public List getDocsList(...){...}
//and many many other methods on 1000 lines of a code
}
Action-Handler 实现表示一组小的类
//Action-Handler API
public class CreateDocHandler extends Handler<CreateDoc>{
//10-20 lines of code
}
public class CreateDocWithAttachHandler extends Handler<CreateDocWithAttach>{
//10-20 lines of code
}
public class GetDocByIdHandler extends Handler<GetDoc>{
//10-20 lines of code
}
public class GetDocListHandler extends Handler<GetDocList>{
//10-20 lines of code
}
示例应用程序
概述
让我们回顾一个使用 Green-forest 框架的简单示例应用程序。它为用户提供一个 Web 界面,并使用数据库进行存储。使用此应用程序,我们可以创建、读取、更新和删除简单的对象。
这是应用程序 Web 界面的视图
您可以从文章的下载部分下载此示例的二进制文件和源代码。下载“web-app-example.war”文件后,将其部署到您的 Web 服务器。此应用程序已在 Tomcat 7.0.28 Web 服务器上进行了测试。
示例说明
首先,我们展示用于 CRUD 操作的模型类 - Doc
package example.common.model;
public class Doc {
public long id;
public String name;
}
然后,我们创建一组动作 - 我们的业务 API
src/example/common/action/
CreateDataBase.java
CreateDocs.java
GetDocsCount.java
GetDocsPage.java
RenameDoc.java
这组中的每个类都是一个动作类
package example.common.action;
public class RenameDoc extends Action<Doc, Void> {
public RenameDoc(int id, String newName){
this(new Doc(id, newName));
}
}
因此,我们可以在 Web 层中使用这些动作
package example.web;
public class AppServlet extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse resp) {
//get data for update
int id = Util.tryParse(req.getParameter("id"), -1);
String newName = req.getParameter("name");
//invoke update action
application.invoke(new RenameDoc(id, newName));
}
}
并且对于每个动作,我们创建自己的处理程序
package jdbc.storage.handler;
@Mapping(RenameDoc.class)
public class RenameDocHandler extends Handler<RenameDoc>{
@Inject
Connection c;
@Override
public void invoke(RenameDoc action) throws Exception {
Doc input = action.input();
PreparedStatement ps = c.prepareStatement("UPDATE doc SET name=? WHERE id=?");
ps.setInt(2, input.id);
ps.setString(1, input.name);
ps.executeUpdate();
}
}
就是这样!我们获得了一组紧凑简单的类,用于 API(Actions)和实现(Handlers)。
摘要
Green-forest 框架为 Java 应用程序的开发提供了新的视角。它是一个免费的开源工具,可以简化应用程序的代码。这个库需要最少的时间来学习,并且适用于广泛的任务。祝您编码愉快!