历时半年,我将一个大型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 版本 - 区域管理功能增强(电子商务方向)
由于公司是面向全国服务的.全国各地都有分公司,需要管理到覆盖全国的各种业务,各种业务系统信息系统的数据都需要规范化. 公司开展网络订单功能,在全国范围内实现网络下单.提高工作效率,提高各公司之间的数据 ...
随机推荐
- C#通过FTP获取服务端文件
一.简介 实际需求是在前端修改了配置文件后,由上位机统一分发给所有设备,因为下位机支持FTP协议,因此选用FTP来实现文件传输功能. 二.准备工作 1.FTP服务搭建 FTP服务端选用FileZi ...
- BUUCTF---RSA3(共模攻击)
1.题目 RSA已知e1,e2,c1,c2 2.知识 共模攻击使用相同N作为加密的模数,如果监听者获知了c1,c2的密文,那么监听者便不需要d1,d2即可解出明文m 3.解题 按照思路编写代码解题 点 ...
- 学习unigui【21】unistringGrid的标题栏动态增加
var Column: TUniGridColumn; begin Column := TUniGridColumn(unstrngrd_summary.Columns.Add); Column.Ti ...
- 记一个.NET AOT交叉编译时的坑
记一个.NET AOT交叉编译时的坑 背景: 使用.NET9开发的Avalonia项目需要部署到Linux-arm64 踩坑: 根据官方AOT交叉编译文档配置后执行打包 dotnet publish ...
- FastAPI依赖注入:链式调用与多级参数传递
title: FastAPI依赖注入:链式调用与多级参数传递 date: 2025/04/05 18:43:12 updated: 2025/04/05 18:43:12 author: cmdrag ...
- public void add(int index, E element)的方法源码分析
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess ...
- 解决微信二维码接口接口返回:errcode\":47001,\"errmsg\":\"data format error rid: xxx和处理返回的buffer的问题
data format error rid问题: 在php中使用curl调用微信二维码生成接口getwxacodeunlimit时得到错误响应信息: errcode\":47001,\&qu ...
- 倍增 & Tarjan 求解LCA
什么是LCA? 假设我们有一棵树: 1 / \ 2 3 / \ / 4 5 6 对于 \(2\) 和 \(6\) 的LCA,就是最近公共祖先,即为距离 \(2\) 和 \(6\) 最近的两个节点公有的 ...
- Maven版本号管理规范:为何父POM是统一依赖版本的最佳实践?
结论先行 在Maven多模块项目中,依赖的版本号应集中定义在父POM的<dependencyManagement>中,子模块通过继承父POM来引用版本号,通常无需在子POM中重复声明.这能 ...
- 炸裂!!!Deepseek接入个人知识库,回答速度飞起来,确实可以封神了
高效管理知识.快速获取信息成为提升工作效率的关键.无论是做技术的同学还是普通的上班族,在日常积累了大量的知识数据和内容.项目文档.会议记录到技术手册.业务流程,这些信息如同宝藏一般,等待着被高效利用. ...