提高生产性工具 - Model代码生成器(NET / JAVA) (一)

原来在上一家公司,整整一年都在做工具,提高生产性,那个项目特别巨大,所以总共为老东家节约了500K左右的美金。

(除了表扬之外,我个人什么好处都没有,领导们都升官发财了,郁闷)

到了新公司,也准备开发一些提高生产性的工具。最近在看NET MVC和Spring MVC的资料。所以想开发一个Model代码生成工具。

公司不能上Git,代码也刚开始写,所以暂时不拿出来了。逻辑很简单,博客园高手如云,看一下就知道我怎么写的了。

功能现在还很简单,以后完善。

软件的界面大概是这个样子的,验证这块只是开了个头罢了。

由于公司未来不知道做NET还是JAVA(或许都做),所以,这里NET和JAVA都对应了.

自动生成的代码也很简单,以后会扩展的。

C#的

using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace model.Models
{
    public class AccountModel
    {
        #region "model"

            [DisplayName("用户名")]
            [Required(ErrorMessage = "项目名称不能缺少")]
            public string username { get; set; }

            [DisplayName("密码")]
            [Required(ErrorMessage = "项目名称不能缺少")]
            public string password { get; set; }

        #endregion
    }
}

JAVA的

package model;

public class AccountModel {

    //用户名
    private String username ;
    public void setusername(String username){
        this.username = username;
    }
    public String getusername(){
        return this.username;
    }

    //密码
    private String password ;
    public void setpassword(String password){
        this.password = password;
    }
    public String getpassword(){
        return this.password;
    }

}

注意点:

关于MetaData,Java和C#有一些区别,例如 C# 字符 string ,Java 字符 String

这里有懂Java的人吗,Java有自动属性吗,set,get一大堆,看着不爽阿。好像Spring框架一定要这么写。。。

代码生成也很简单,就是字符串的操作,StringBuilder里面不停的AppendLine

using System;
using System.IO;
using System.Text;

namespace DevKit.MVCTool
{
    public static partial class ModelCodeGenerator
    {
        /// <summary>
        /// 缩进
        /// </summary>
        private static int indent;
        private static string UsingSystem = "using System;";
        private static bool NeedComponentModel = false;
        private static string UsingComponentModel = "using System.ComponentModel;";
        private static bool NeedDataAnnotations = false;
        private static string UsingDataAnnotations = "using System.ComponentModel.DataAnnotations;";

        /// <summary>
        /// 生成ModelCode
        /// </summary>
        /// <param name="filename"></param>
        /// <param name="model"></param>
        internal static void GenerateCSharp(string filename, ModelInfo model)
        {
            StreamWriter codeWriter = new StreamWriter(filename, false);
            StringBuilder code = new StringBuilder();
            //缩进用空格
            char space = " ".ToCharArray()[0];
            indent = 0;
            code.AppendLine(String.Empty);
            code.AppendLine("namespace " + model.ProjectName + ".Models");
            code.AppendLine("{");
            indent += 4;
            code.AppendLine(new string(space, indent) + "public class " + model.ModelName);
            code.AppendLine(new string(space, indent) + "{");
            indent += 4;
            code.AppendLine(new string(space, indent) + "#region \"model\"");
            code.AppendLine(String.Empty);
            indent += 4;
            foreach (var item in model.Items)
            {
                if (!string.IsNullOrEmpty(item.DisplayName))
                {
                    //DisplayNameAsComment
                    if (item.DisplayNameAsComment)
                    {
                        code.AppendLine(new string(space, indent) + "/// <summary>");
                        code.AppendLine(new string(space, indent) + "/// " + item.DisplayName);
                        code.AppendLine(new string(space, indent) + "/// </summary>");
                    }
                    //DisplayName
                    code.AppendLine(new string(space, indent) + "[DisplayName(\"" + item.DisplayName + "\")]");
                    NeedComponentModel = true;
                }
                if (item.Required)
                {
                    //Required Without Error Message
                    if (!String.IsNullOrEmpty(item.ErrorMsgForRequired))
                    {
                        code.AppendLine(new string(space, indent) + "[Required(ErrorMessage = \"" + item.ErrorMsgForRequired + "\")]");
                    }
                    else
                    {
                        code.AppendLine(new string(space, indent) + "[Required]");
                    }
                    NeedDataAnnotations = true;
                }
                code.AppendLine(new string(space, indent) + "public @type @name { get; set; }"
                    .Replace("@type", Common.DotNet.MetaData[item.DataType])
                    .Replace("@name", item.Name)
                );
                code.AppendLine(String.Empty);
            }
            indent -= 4;
            code.AppendLine(new string(space, indent) + "#endregion");
            indent -= 4;
            code.AppendLine(new string(space, indent) + "}");
            indent -= 4;
            code.AppendLine("}");

            codeWriter.WriteLine(UsingSystem);
            if (NeedComponentModel) codeWriter.WriteLine(UsingComponentModel);
            if (NeedDataAnnotations) codeWriter.WriteLine(UsingDataAnnotations);

            codeWriter.Write(code);
            codeWriter.Close();
        }
    }
}

这种工具,小项目里面其实真心没有什么作用,大项目,需要很严格的编码规范,然后项目非常多的,价值就体现出来了。

所有代码编码规则可以统一了,做设计的人,直接用工具作设计即可,然后支持从Excel导入导出,又是一个提高生产性的措施。

欢迎大家提需求。。。

时间: 2024-07-30 13:31:16

提高生产性工具 - Model代码生成器(NET / JAVA) (一)的相关文章

提高生产性工具 - 各种工具的集成(三)

这周学习了一下Struts2的一些知识,按照网络上各种博文的指点,跌跌撞撞,捣鼓出了一个Struts2的Demo了. 原来一直是学习NET的,一下子开始玩Java的东西,还需要一点时间来适应Eclapse. Struts的Jar包导入都是依靠Maven进行的,据说Maven可以直接生成Struts的工程,尝试了一下,公司网络不给力,没有成功. Struts的Helloworld环境配置,网络上有很多文章了,这里也不多唠叨了.有一点请注意, 如果你使用Maven的话,在百度上检索 Maven St

提高生产性工具(四) - XML数据库的尝试

首先祝大家新年快乐.身体健康,平安就是福气. 对于一般的个人迷你项目,数据量不大的时候,完全没有必要使用数据库,管理数据使用XML就可以了. 自己尝试写了一个XML数据库,插入1w条小记录,大概3M大小,然后将一半数据进行更新,大约耗时3秒钟. XML数据库其实就是一个内存数据库,数据都在内存里面,速度不慢. 然后由于是XML序列化的,其实ORM也不需要了.每个数据库文件保存一种格式的数据. 废话不说,上代码 先是数据模型: /* * Created by SharpDevelop. * Use

Maven——项目管理工具,可以对 Java 项目进行构建、依赖管理。

Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑.当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件. Maven

分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解

[博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]https://www.cnblogs.com/m-yb/p/9986309.html分页功能的实现可以使用各种插件, 笔者今日闲来无事, 写了 分页工具类 前后台代码 Java JavaScript 的 实现及思路梳理.供大家参考.分页功能的需求一般有: 当前页/每页条数/总页数/总记录数/起始记录数/数

SpringMVC mybatis 多数据源 代码生成器 SSM java redis shiro ehcache

获取[下载地址]   QQ: 313596790官网 http://www.fhadmin.org/A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都

安全权限、高性能、高并发、分布式 【代码生成器】java shiro、maven、Bootstrap、HTML5、SpringMVC、Mybatis、Hibernate

获取[下载地址] A 代码生成器(开发利器);     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势C 安全权限框架shiro ;  Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身

如何通过反编译工具与插件 查看java *.class 文件源码

Java Decompiler[java 反编译]:开发了反编译工具,可以方便查看*.class 文件源码.下面介绍几种查看源码的方式:工具&插件 1.JD-GUI JD-GUI  是显示java 源代码 *.class文件的 图形界面工具.可以在这里下载:JD-GUI-DownLoad 下载下来后,打开该工具,直接将jar包 拖拽到 显示窗口即可查看源代码. 举例:通过 jd-gui.exe 工具 查看 xUtils-2.6.14.jar 包 源码: 但是,一般开发用的是IDE(Integra

安全权限、高性能、高并发 【代码生成器】java shiro、maven

A 代码生成器(开发利器);  B 阿里数据库连接池druid; C 安全权限框架shiro ; D ehcache 自定义二级缓存  系统为主流的 springmvc+mybaits 3.2 版本 ,有maven版本和非maven版本,赠送同UI hibernate版本(支持sqlsever mysql oracle)  jdk 1.6 1.7 1.8  tomcat 6 7 8 (响应式 手机 PC 平板 最下面手机截图)1. 有 oracle .msyql.spring3.0.spring

根据Json字符串自动生成model类(java)

根据Json自动生成Model类 java 将json转换成java类 http://jsongen.byingtondesign.com you bring the json, we'll bring the code 发现一个很不错的网站,能够直接将json字符串生成java model类,超级方便. 很久之前就知道,一直没有用过,昨天在弄G+的数据的时候,用上了. 再结合Gson,你基本上不用做些什么了,很快就能转换成java对象了. 用法:找一个数据很全的json大数据,保存为.json