以Model为核心的表单设计器的思路

简介:

在之前的文章中介绍过一些表单设计器的思路和想法。在上一篇文章:零代码平台实现中说到我要实现一个功能强大的表单设计工具。经过几天思考,觉得以Model为核心去实现表单设计器思路既简单也很清楚。这篇文章我将谈谈如何以Model为核心去实现表单设计器。

设计思路:

    之所以会我想到以Model为核心,主要借鉴Asp.net MVC框架。ASP.NET MVC中控制器向View提供Model。View将Model渲染成表单。有一点不好的是生成的View中夹杂了HTML和C#代码,没有了ASP.Net Web Form的用户控件,所以就不能去可视化拖拽了,看下面ASP.net MVC生成表单的两张图。

    简单的List页面:

 

    Detail页面:

    从上图中可以看出不存在控件,那就不能可视化的拖拽。

    我做这个设计器的目的之一就是解决这个不能拖拽的问题,先对比一下asp.net表单生成机制和我的表单设计器的机制:

    从上图可以看出两种机制是差不多的。

    mvc中有ModeL和ViewModel两个概念。Model是一般都固定不变的,编译之后就会存在dll,所以通过下面代码使用反射来生成表单。

复制代码
1  System.Windows.Forms.OpenFileDialog dlg  = new  System.Windows.Forms.OpenFileDialog(); 
2  dlg.AutoUpgradeEnabled  = false ;
3  if  (dlg.ShowDialog()  ==  System.Windows.Forms.DialogResult.OK)
4  {
5  string  fileName  =  dlg.FileName;
6  txtPath.Text  =  fileName;
7  System.Reflection.Assembly ass;
8  Type[] types;
9  ass  =  System.Reflection.Assembly.LoadFile(fileName); // 要绝对路径
10  // 获取所以的实体类
11     types  =  ass.GetTypes();
12  foreach (Type type  in  types)
13  {
14  ListBoxItem li  = new  ListBoxItem();
15  li.Content  =  type.Namespace + " . " + type.Name;
16  lbxModel.Items.Add(li);
17 
18  }
19 
20 
21 
22  }
复制代码

     对于ViewModel,我计划先使用SQL语句生成ViewModel的结构和代码,然后生表单。

    Model方式界面:

 

   ViewModel方式界面:

 

简单示例:

    看个例子,实体类代码如下:

复制代码
1  public class  Person
2  {
3  public string  Name
4  {
5  get ;
6  set ;
7  }
8 
9  public int  Age
10  {
11  get ;
12  set ;
13  }
14 
15  public string  Sex
16  {
17  get ;
18  set ;
19  }
20  }
复制代码

    在List页面,我生成一个固定的Grid和以下常用的工具栏按钮如:新增、修改、删除...,如下如。

 

   对于修改页面、详情页面等,我生成label+textbox组合方式的表单。

下面我们就可以自由调整界面了:

调整之后的一级界面

 

调整之后的二级界面

最后通过代码生成机制生成aspx代码。

总结:这个是我思考出的一个表单设计器的解决方案,感觉比较简单而且比较通用,故写这篇文章做为一个分享。考虑不周的地方期待大家多多指正。







本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2010/09/24/model-wpf-form-designer.html,如需转载请自行联系原作者

相关文章
|
存储 缓存 监控
《优化接口设计的思路》系列:第二篇—接口用户上下文的设计与实现
大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 作为一名从业已达六年的老码农,我的工作主要是开发后端Java业务系统,包括各种管理后台和小程序等。在这些项目中,我设计过单/多租户体系系统,对接过许多开放平台,也搞过消息中心这类较为复杂的应用,但幸运的是,我至今还没有遇到过线上系统由于代码崩溃导致资损的情况。这其中的原因有三点:一是业务系统本身并不复杂;二是我一直遵循某大厂代码规约,在开发过程中尽可能按规约编写代码;三是经过多年的开发经验积累,我成为了一名熟练工,掌握了一些实用的技巧。
122 0
|
编解码 数据可视化 Java
3D模型拆分与合并展示,IVX真的可以简单实现
iVX 平台的优势和特点,包括逻辑完备性、操作流畅性、面向对象设计方法、可独立作为编程语言等方面的优势,下面来详细的介绍介绍。
130 0
|
JSON 前端开发 JavaScript
开源表单方案 Formily 的核心设计思路
Formily 是一个数据+协议驱动的表单解决方案,它站在Reactive响应式编程巨人的肩膀上,构建出了从基础表单到低代码领域的高性能通用基础能力,同时其配套的跨框架+跨终端组件生态体系,也能让用户更高效的开发日常业务表单,尽可能的减少了重复冗余的逻辑实现。本篇内容来自白玄在第十六届D2前端技术论坛的分享,将为你介绍如何在高复杂业务场景下提高我们的表单性能与表单开发效率。
4736 1
开源表单方案 Formily 的核心设计思路
|
7月前
|
移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统基于form-generator的表单设计器增加子表单的一种简单方法(一)
基于若依的ruoyi-nbcio流程管理系统基于form-generator的表单设计器增加子表单的一种简单方法(一)
108 0
|
JSON 数据格式
layui框架实战案例(3):使用多层嵌套json格式数据的使用templet解决方案
layui框架实战案例(3):使用多层嵌套json格式数据的使用templet解决方案
298 0
|
前端开发
前端学习案例1-组件优化1
前端学习案例1-组件优化1
79 0
前端学习案例1-组件优化1
|
前端开发
前端学习案例1-组件优化1
前端学习案例1-组件优化1
67 0
前端学习案例1-组件优化1
|
前端开发
前端学习案例2-组件优化2
前端学习案例2-组件优化2
82 0
前端学习案例2-组件优化2
|
数据采集 算法 数据可视化
MMdetection框架速成系列 第03部分:简述整体构建细节与模块+训练测试模块流程剖析+深入解析代码模块与核心实现
按照抽象到具体方式,从多个层次进行训练和测试流程深入解析,从最抽象层讲起,到最后核心代码实现,希望帮助大家更容易理解 MMDetection 开源框架整体构建细节
616 0
html+css实战44-综合案例-表单
html+css实战44-综合案例-表单
141 0
html+css实战44-综合案例-表单