历时半年,我将一个大型asp.net的零代码快速开发平台转成了java
老的博客园朋友应该清楚,我在10年前开发了一个基于asp.net的大型开发平台,其中作为开源项目的SilverLight流程设计器也获得了当年的微软开发大奖。时过境迁,当年的设计器早就在技术的更新换代中迭代了很多次。
很久以来就一直有一个想法,要实现不同语言平台下的无差别开发平台使用体验,这一次终于下定决心。当然这个决心也是随着开发平台.Net版本的不断进步带给我的信心,因为整个项目虽然使用asp.net WebForm,但是已经完全抛弃了WebForm的开发习惯,没有ViewStat、不使用微软本身的ajax,有了这些基础,转Java就少了一半的阻碍。
下面我要讲的就是这个过程,也给有相同需要的朋友们提供一种思路。
在开始之前,需要先介绍一个.Net版本的基本功能和技术路线,然后就 开始我们的转换之路,最后我们可以看到一个在两个平台上无差别体验的开发平台,他们甚至可以相互自动转换。
.Net版本具备的功能
目前.Net版本具备以下功能
- 智能表单(所见即所得的可视化设计,自动生成数据库表而不是绑定数据库表)
- 流程设计、监控(所见即所得的可视化设计)
- 智能报表
- 数据中心(以平台为中心,管理各种业务系统)
- 智能适配多(PC,微信小程序,企业微信,钉钉等)
以上是开发平台核心模块,除了这些核心模块还有很多其他的辅助模块,例如
- 系统管理(用户、部门、职务、角色)
- 系统日志(登录、访问、操作、异常)
- 认证中心(OAuth2,门户)
- 等等
.Net版本的开发平台可以被部署在window或Linux上,支持大部分的主流数据库。
.Net版本的技术路线
- 核心模块使用C#编写
- 展现层使用asp.net WebForm
- 客户端使用Jquery
- 移动端页面使用H5
- 使用DataProvider支持多种数据库
以上是.Net版本使用的主要技术,下面我们进行Java转换的时候,就是要根据以上技术进行思考和转换。
转成Java要实现的效果
转成Java最终要实现什么效果,这是在转换之前需要考虑的问题,不同的最终结果会有不同的实现。在考虑到各种情况下,我选择了一条最难的路,就是在客户使用体验上保持百分百的一致。
要怎么实现这个目标呢?最开始的想法是基于现有的java开源产品进行封装,但是这样需要对开源产品有非常熟悉的了解,并且也难免需要对开源产品进行非常多的二次开发。最后下定决心,自己转换。
在.Net版本中有哪些具体的客户体验,我整理一下几点:
- 设计体验
- 设计体验指的是客户使用我们开发平台的功能在产品设计、开发中的体验。在客户将平台从.Net转成java后,客户在.Net平台上形成的习惯和积累的知识会在java平台上无差别的使用。
- 产品体验
- 产品体验指的是客户使用我们平台开发出来的产品交付给最终使用人后,使用人在不同平台上的使用经验也会无差别的保留。
- 数据库体验
- 在.Net和Java两种版本使用完全一样的数据库
转Java的思路
从.Net转Java的目标已经有了,但到底该怎么开始呢?为了理清思路,我们回头看一下前面说的.Net的技术路线。
- 核心模块使用C#编写
- 展现层使用asp.net WebForm
- 客户端使用Jquery
- 移动端页面使用H5
- 使用DataProvider支持多种数据库
以上3、4基本不需要修改就可以使用。
1、5两点是不同语言之间的转换,虽然繁琐,但也并非难事。
最困难的就是第2点,我该怎么把asp.net的WebForm转成Java呢。为此,我缕了一下.Net版本中使用WebForm的情况。
前面说过,虽然使用了WebForm,但是这个历史原因带来的包袱在平台的发展中已经被我丢掉了,我不使用ViewStat,不使用微软的ajax控件,在这种情况下你可以平台看作是前后端分离的(当然没有完全分离)。
为了能转换,我们需要了解WebForm的工作原理。在asp.net的上一代技术平台中,asp,jsp,php等都是用了大致一样的思路,就是在服务器端动态生成HTML控件,然后输出到客户端。在早期的asp程序中,你可以看到大量的这种拼接、生成html的代码。
为了改变这种混乱的局面,asp.net WebForm应运而生了。它把开发windows form的经验带到了web开发,虽说在当时确实先进,但在目前来看已经不适应了。
WebForm的思路是使用服务器端语言来封装各种HTML控件,经过服务器端的封装,可以在后台使用代码方便的控制最终HTML控件的展现方式,例如:
- DropDownList。对应HTML的<select></select>
- CheckBox。对应HTML的<input type="checkbox"/>
- RadioButton。对应HTML的<input type="radio"/>
- TextBox。对应HTML的<input type="input"/>或者<textarea/>
等等,每一个HTML控件都可以找到WebForm的对应项。每一个控件经过服务器的渲染,最终以HTML控件的形式输出。
有了这些了解后,我有一个大胆的想法,就是用Java来实现.Net平台中的各种服务器控件,并保持WebForm的控件生命周期管理。之所以这么做,是为了保持WebForm中我写的大量的逻辑 都能在Java中被保持(因为有些逻辑代码的写法我已经搞不懂最初的想法了)。最终,我完成了以下.Net控件的Java实现(这个只是.Net平台下我用到的控件,并不是全部.Net控件)。

除了以上控件之外,还有一些.Net中没有Java对应的类,比较重要的是DataSet和DataTable。当然还有一些其他很多的不是很关键类的转换,都花了不少力气。
有了这些控件后,我写了一个类似asp.net中的控件生命周期管理类,最终在tomcat中能运行起来一个类似WebForm生命周期管理、以各种服务器控件渲染来生成HTML的java程序,并且这个程序的运行结果和.net完全保持一致,这样我的各种客户端各种js脚本也都基本保持不变,当然我也写了一些js配合类脚本来保证到达和.Net完全一致的效果。
在这个过程中,我主要用到了一个工具:
CSharptToJavaConverter
这个工具帮我做了很多非脑力工作,在这个工具帮我将.Net转成Java后,我在这个基础上进行修改工作。
以上是整个转换工作的主要部分,除了这些还有一些其他的零碎工作,主要 是解决在Java中没有对应.Net实现的部分。
最终产品
最终,我完成了一个asp.net WebForm的大型产品转成Java的实现。现在两个平台有以下的共同点:
- 完全一致的客户使用体验,如果你不注意浏览器的url地址,完全看不出是两套产品
- 两个平台可以连接 同一个数据
除了以上共同点,这两个平台的产品代码还可以相互转换。
例如:我用.Net平台设计出来的各种模块,可以通过中间适配器转成java的实现,这个过程是自动的。
结尾
以现在的眼光来看,一个.Net和Java实现相同功能的产品并非难事。但在十几年前,我没有想到会做java的实现,并且不幸的是,我用了asp.net WebForm这个当时看起来很先进的asp的下一代产品。
经过这样的转化后,在java实现中,HTML控件以类的方式呈现,并且经过生命周期 的优化,所能达到的性能指标比.Net版本高出好几倍。
历时半年,我将一个大型asp.net的零代码快速开发平台转成了java的更多相关文章
- CS页面-Asp.net+Spring.Net.Framework--SNF快速开发平台3.0
SNF快速平台有BS和CS两种,之前介绍了BS界面,下面发几张图看一下CS界面看看是什么样的 这是SNF快速开发平台的CS框架 1.有多种主页和登录页面. 2.多种页面风格 下面就先先看看页面显示的效 ...
- SNF快速开发平台MVC-EasyUI3.9之-ueditor富文本编辑在 asp.net MVC下使用步骤
mvc项目中用到了这个富文本编辑就试着把遇到的问题个使用步骤在这里记录一下,希望大家少走弯路. 1.首先我们先下载net版本的uediot 2.然后把整个文档拷贝到我们的项目中,记得是整个 把下载的文 ...
- LBPL--基于Asp.net、 quartz.net 快速开发定时服务的插件化项目
LBPL 这一个基于Asp.net. quartz.net 快速开发定时服务的插件化项目 由于在实际项目开发中需要做定时服务的操作,大体上可以理解为:需要动态化监控定时任务的调度系统. 为了实现快速开 ...
- SNF快速开发平台3.0之BS页面展示和九大优点-部分页面显示效果-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout
一)经过多年的实践不断优化.精心维护.运行稳定.功能完善: 能经得起不同实施策略下客户的折腾,能满足各种情况下客户的复杂需求. 二)编码实现简单易懂.符合设计模式等理念: 上手快,见效快.方便维护,能 ...
- SNF快速开发平台3.0之-界面个性化配置+10种皮肤+7种菜单-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout
一.个性配置-首页:可以进行拖动保存配置,下次登录时就会按配置的进行加载 二.个人配置页面 7种菜单用户可自定义配置,和预览效果 10种皮肤自定义配置,和预览效果 皮肤和菜单可以随意组合-部分截图: ...
- asp.net导出excel-一行代码实现excel、xml、pdf、word、html、csv等7种格式文件导出功能而且美观-SNF快速开发平台
分享: 腾讯微博 新浪微博 搜狐微博 网易微博 腾讯朋友 百度贴吧 豆瓣 QQ好友 人人网 作者:王春天 原文地址:http://www.cnblogs.com/spring_ ...
- 基于ASP.NET MVC的快速开发平台,给你的开发一个加速度!
基于ASP.NET MVC的快速开发平台,给你的开发一个加速度! bingo炸了 2017/4/6 11:07:21 阅读(37) 评论(0) 现在的人做事情都讲究效率,最好能达到事半功倍那种效果,软 ...
- 分享一个全开源的ASP.NET快速开发平台,能快速开发OA CRM ERP 等系统
bingo炸了 2017/3/30 16:28:14 阅读(870) 评论(0) 公司业务量比较大,接了很多项目,为了缩短开发周期老板让我牵头搭建了一个快速开发平台. 我们主要的业务是做OA.CRM. ...
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 大型软件系统客户端数据同步的问题解决
作为一个完整的整体信息化解决方案需要有足够强大的各种功能,这些功能相对独立,又互相依存.当有需要这样的功能时可以随时拿出来用,适当修改一下就可以满足要求.只有这样才能快速开发各种信息化系统,才能满足各 ...
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 区域管理功能增强(电子商务方向)
由于公司是面向全国服务的.全国各地都有分公司,需要管理到覆盖全国的各种业务,各种业务系统信息系统的数据都需要规范化. 公司开展网络订单功能,在全国范围内实现网络下单.提高工作效率,提高各公司之间的数据 ...
随机推荐
- Ansible运行临时命令
一.基本语法格式: 格式:ansible 受控主机IP/主机组 [选项] 参数 选项 -k 手动输入SSH协议的代码 -l 指定主机清单文件 -m 指定要使用的模块名 -a 设置传递给模块的参数 -M ...
- halcon 入门教程(六) 图像匹配(基于形状的模板匹配)与缺陷检测区域定位
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/18783476 有兴趣可以多看其他的halcon教程 halcon 学习教程目录 本篇主要讲一下 ...
- SpringBoot+Thymeleaf渲染下拉框异常解决
常规方式 <select class="form-control" name="operationType" th:field="${itemT ...
- 导入SpaceClaim的iges模型尺寸被放大1000倍的问题
问题 ANSYS APDL 和 Workbench 联合仿真时,导入 SpaceClaim 的 .iges 模型尺寸被放大 1000 倍数. 如 APDL 生成的尺寸为 10 mm(注:此处的 mm ...
- 【Ubuntu】在Ubuntu上安装微信
[Ubuntu]在Ubuntu上安装微信 零.说明 微信官网最近发布了Linux的测试版本,实际使用下来与Windows版本相差不多,本文介绍如何在Ubuntu(Debian系)上安装Linux版本的 ...
- Ubuntu24使用Wine运行Windows程序安装微信
Ubuntu24使用Wine运行Windows程序安装微信 2024.11.8:好消息!微信发布Linux版本了,微信主站Linux版本客户端下载页面:https://linux.weixin.qq. ...
- Unity/Auto Layout -- 理解Layout Elements(布局元素)
- 测试工作中用到的Redis命令
由于项目测试的需要,经常需要连接Redis数据库修改某些键值,无奈最近Redis的客户端连接工具使用不了 只有使用命令行来操作了,现总结如下: 1.远程连接Redis redis-cli -h hos ...
- dubbo源码解析-服务暴露与发现
一.概述 dubbo是一个简单易用的RPC框架,通过简单的提供者,消费者配置就能完成无感的网络调用.那么在dubbo中是如何将提供者的服务暴露出去,消费者又是如何获取到提供者相关信息的呢? 二.dub ...
- 前端传字符串,需要转List对象
前端传字符串,需要转List对象 import com.alibaba.fastjson.JSONObject; List<LogySbjsJdsbqxxxAccount> param = ...