原来在上一家公司,整整一年都在做工具,提高生产性,那个项目特别巨大,所以总共为老东家节约了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()[];
indent = ;
code.AppendLine(String.Empty);
code.AppendLine("namespace " + model.ProjectName + ".Models");
code.AppendLine("{");
indent += ;
code.AppendLine(new string(space, indent) + "public class " + model.ModelName);
code.AppendLine(new string(space, indent) + "{");
indent += ;
code.AppendLine(new string(space, indent) + "#region \"model\"");
code.AppendLine(String.Empty);
indent += ;
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 -= ;
code.AppendLine(new string(space, indent) + "#endregion");
indent -= ;
code.AppendLine(new string(space, indent) + "}");
indent -= ;
code.AppendLine("}"); codeWriter.WriteLine(UsingSystem);
if (NeedComponentModel) codeWriter.WriteLine(UsingComponentModel);
if (NeedDataAnnotations) codeWriter.WriteLine(UsingDataAnnotations); codeWriter.Write(code);
codeWriter.Close();
}
}
}

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

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

设计人员完成这样的表格,然后,工具直接读取Excel文件,生成代码,这个是我的目标.

关注点分离,让设计模型规则的人,做设计,开发者关注BL的开发.

欢迎大家提需求。。。

更新:

我还希望能做这样一个路由配置功能,这些功能,其实更对的想给设计人员使用,或者能够将大家的时间从记忆代码写法中解放出来.

我喜欢可视化的东西,目标是做一个设计书到代码的自动工具.当然,我承认,不可能做到完全不靠手工编码,但是希望这个比例能够减少很多.

人,应该去做更加需要思考的工作.

关注点分离,让设计路由的人,统筹管理路由规则.

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

  1. 提高生产性工具 - Model代码生成器(二)

    首先,我想阐述一下我开发这个工具的一个观点. 如果大家做过对日软件的话,很多时候,日方是进行设计的,数据模型是什么样子的,各个字段的类型,需要做什么验证,验证规则,错误信息,都是日方制定的. 外包就是 ...

  2. 提高生产性工具(五) - 数据的过滤器和图形化(适用于 MVC5 + MongoDB)

    在下面流水账似的文章之前,先将一些感悟说一下. 1.如果一个系统对于某个功能在至少三个地方使用的话,必须将其抽象提炼出来,而且时间点最好是大规模测试之前. 2.提炼出来的功能,如果品质做得好,整个系统 ...

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

    首先祝大家新年快乐.身体健康,平安就是福气. 对于一般的个人迷你项目,数据量不大的时候,完全没有必要使用数据库,管理数据使用XML就可以了. 自己尝试写了一个XML数据库,插入1w条小记录,大概3M大 ...

  4. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  5. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

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

    [博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]http ...

  7. Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统,基于Google Dapper论文

    Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统,基于Google Dapper论文 ...

  8. 五、jdk工具之jmap(java memory map)、 mat之四--结合mat对内存泄露的分析、jhat之二--结合jmap生成的dump结果在浏览器上展示

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  9. 蓝桥杯 算法提高 11-1实现strcmp函数 (JAVA方法)

    蓝桥杯 算法提高 11-1实现strcmp函数 (JAVA方法) 首先这不是一个多难的题,但是网上的我没怎么找到有Java的代码,基本全都是c语言的,小编是个小白,如果有不对的地方请联系小编 问题描述 ...

随机推荐

  1. ASP.NET将原始图片按照指定尺寸等比例缩放显示图片

    网站上可能会有很多图片,比如产品图片等,而且他们可能大小不一,宽度和高度也不一定一样,有的很大有的很小.如果放在一张网页上,可能会破坏版面,但是如果强制让他们按照指定的宽度和高度显示,因为比例不同还会 ...

  2. 程序员藏经阁 Linux兵书

    程序员藏经阁 Linux兵书 刘丽霞 杨宇 编   ISBN 978-7-121-21992-4 2014年1月出版 定价:79.00元 536页 16开 内容提要 <Linux兵书>由浅 ...

  3. Tomcat源码解读系列(一)——server.xml文件的配置

    Tomcat是J2EE开发人员最常用到的开发工具,在Java Web应用的调试开发和实际部署中,我们都可以看到Tomcat的影子.大多数时候,我们可以将Tomcat当做一个黑盒来看待,只需要将编写的J ...

  4. [转]Java并发编程:Lock

    链接: http://www.cnblogs.com/dolphin0520/p/3923167.html

  5. javaweb回顾第十二篇监听器

    前言:在web应用中,有时候你想在web应用程序启动或关闭的时候执行一些任务,或者你想见他Session的创建和关闭等你就可以通过监听器来实现.那么Servlet来8个监视器接口,下面一一讲解一下. ...

  6. ligerUI Tree 实例 代码

    http://www.oschina.net/code/snippet_1762525_47819#68813

  7. Nodejs从有门道无门菜鸟起飞教程。

    这是一篇菜鸟教程,这是一篇菜鸟教程,如果你是菜鸟到话. 简单来说Nodejs并不是一门新的语言,但是它可以让我们的JS运行在服务器端,在服务器端写JS代码并且输入输出,也就是说以后要是有人问你JS是不 ...

  8. (扩展欧几里德算法)zzuoj 10402: C.机器人

    10402: C.机器人 Description Dr. Kong 设计的机器人卡尔非常活泼,既能原地蹦,又能跳远.由于受软硬件设计所限,机器人卡尔只能定点跳远.若机器人站在(X,Y)位置,它可以原地 ...

  9. 【原创】C#玩高频数字彩快3的一点体会

    购彩风险非常高,本人纯属很久以前对数字高频彩的一点研究.目前已经远离数字彩,重点研究足球篮球比赛资料库和赛果预测. 这是一篇在草稿箱保存了1年多的文章,一直没发现,顺便修改修改分享给大家.以后会有更多 ...

  10. 【Android】Android Studio 快速打开Github上的Demo

    ******* 注意 ******* Google 在15年12月2日发布了Android Studio 2.0,比起以前的版本速度提升了很多,所以强烈推荐各位朋友升级IDE! 1.修改:build. ...