65.9K
CodeProject 正在变化。 阅读更多。
Home

Green-forest 框架入门

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.85/5 (4投票s)

2013 年 1 月 31 日

CPOL

2分钟阅读

viewsIcon

17362

Green-forest 框架的介绍,用于创建一个 Web 应用程序示例。

Green-forest Logo

引言

Green-forest 框架是一个简单的 IoC 容器,具有 Action-Handler 架构。它不是 Spring Framework 或 JEE 的竞争对手,但它可以为这些框架提供强大的补充。您可以将 Green-forest 用于单个类实现或复杂的业务逻辑。

Action-Handler 架构可以用以下方案表示

如方案所示,我们将逻辑划分为一些类

  1. 操作

  2. Action 类表示一个“原子业务方法”,包含输入和输出数据

    //Action with String input and Integer output data
    public class SomeAction extends Action<String, Integer>{
     
        public SomeAction(String input) {
            super(input);
        }
    }
  3. Handler

  4. 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);
        }
    }
  5. 框架

  6. 框架的引擎确保处理程序的运行

    //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 应用程序的开发提供了新的视角。它是一个免费的开源工具,可以简化应用程序的代码。这个库需要最少的时间来学习,并且适用于广泛的任务。祝您编码愉快!

© . All rights reserved.