我的java web架构方案(续)之ERP系统_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 我的java web架构方案(续)之ERP系统

我的java web架构方案(续)之ERP系统

 2018/7/30 18:35:21  afadgaeg  程序员俱乐部  我要评论(0)
  • 摘要:ERP系统中,最优秀的前端技术非React莫属,层层封装,可以在任何一层开始构建应用,兼顾了足够的灵活性、适应性和封装重用性。如同下围棋,用最简洁的规则,描述了最复杂的智慧。而语法严格的工业语言JAVA,足够优秀能承担优良封装的任务。此文的前篇链接:我的javaweb架构方案闲话少述,我们首先用一个方法来构筑一个ActionString[]fieldNames=newString[]{"id","name","remark"}
  • 标签:ERP Web Java 架构
ERP系统中,最优秀的前端技术非React莫属,层层封装,可以在任何一层开始构建应用,兼顾了足够的灵活性、适应性和封装重用性。如同下围棋,用最简洁的规则,描述了最复杂的智慧。

而语法严格的工业语言JAVA,足够优秀能承担优良封装的任务。

此文的前篇链接:我的java web架构方案

闲话少述,我们首先用一个方法来构筑一个Action

class="java" name="code">
String[] fieldNames = new String[]{"id", "name", "remark"};
//此方法如何被servlet调用请参考前篇链接
public void insert(HttpServletRequest req, HttpServletResponse res) throws ...{
//ActionTool是一个业务逻辑工具类,他的insert静态方法接收四个参数
//req和res为servlet的对象
//第三个参数是要插入记录的数据库表映射实体类型
//第四个参数是字段数组,这个数组被用来生成sql语句和完成ORM映射
    ActionTool.insert(req, res, Area.class, fieldNames);
}


我们展开ActionTool.insert方法

public static void insert(HttpServletRequest req, HttpServletResponse res, Class entityClass, String[] fieldNames) throws ...{
//此方法只有一行代码
//MysqlTool.getInsertSql方法用来拼接Mysql数据库的insert语句
//并使用以冒号作前缀的命名参数,比如生成类似这样的 insert into `table_name` (`p1`,`p2`)values(:p1,:p2); 
    executeUpdate(req, res, entityClass, MysqlTool.getInsertSql(entityClass.getSimpleName(), fieldNames), fieldNames);
}



我们再展开executeUpdate方法

public static void executeUpdate(HttpServletRequest req, HttpServletResponse res, Class entityClass, String sql, String[] fieldNames)throws ... {
        Object entity = entityClass.newInstance();
//bind方法会使用反射机制将一系列请求参数绑定到JavaBean,并且进行bean validate,并将异常消息写入messages对象中,供res输出,此方法返回代表数据完整性验证成功与否的布尔值。如果验证失败,会输出失败消息(JSON)
        if (bind(req, res, entity, fieldNames)) {
            try (Connection conn = TgdDataSource.getConnection();) {
                //DAO.executeUpdate将数据插入数据表
                DAO.executeUpdate(conn, sql, entity);
                //输出成功消息
                outSuccessfulMsg(req, res);
            }
        }
    }


以上的DAO.executeUpdate方法和MysqlTool.getInsertSql方法我不在赘述,请参考此文顶部的前篇链接,这里仅贴出方法源码:

public static int executeUpdate(Connection conn, String sql, Object bean)
            throws ... {
        PreparedStatementWrapper warper = new PreparedStatementWrapper(conn, sql);
        warper.bind(bean);
        try (PreparedStatement stmt = warper.getStmt();) {
            return stmt.executeUpdate();
        }
    }


public static String getInsertSql(String entityName, String[] fieldNames) {
        StringBuilder values = new StringBuilder();
        StringBuilder names = new StringBuilder();
        for (String fieldName : fieldNames) {
            names.append(",`").append(JavaTool.camelToUnderline(fieldName)).append("`");
            values.append(",:").append(fieldName);
        }
        return new StringBuilder("insert into `").append(JavaTool.camelToUnderline(entityName)).append("` (")
                .append(names.substring(1)).append(")values(").append(values.substring(1)).append(");").toString();//clz.getSimpleName()
    }



由此,我们用足够优良的封装,用一行代码完成了一个Area数据插入动作的API。
当然,业务逻辑远比此复杂,但这样的封装,显然可以适应足够复杂的情况。

我们可以以同样的原则,构筑update、delete以及select的Action,对于大多数ERP系统,可能会有近三分之二的Action,只需要一行代码即可完成。

并且,我们可以在封装的任何一层,开始构筑我们的应用,而不用担心被框架所困,以致画蛇添足。

在此我依然强调我的原则:

架构原则:
1、轻量级组件优于重量级框架。实现完全解耦
2、约定优于配置。实现零配置
3、不要为了所谓的优雅而做不优雅的事,如过度封装和过度配置

本人目前在职,并有意寻求更具挑战和更高报酬的工作,以期望充分实现个人价值。
我的邮箱:2530210585@qq.com 手机:13874372370
上一篇: Spring中HttpRequest获取的几种方式 下一篇: 没有下一篇了!
发表评论
用户名: 匿名