文档驱动式代码设计器——代码是设计出来的!

 

  代码是敲出来的吗?是批量生成出来的吗?

 

  No no no,代码是设计出来的!

 

  如果说到代码生成器,大家可能会想到三层、动软代码生成器、数据库表等等。其一般的思路是,先有数据库然后根据库里的表自动生成一系列的代码,包括实体类、持久化、业务层(空函数)、页面代码等,还可以生成数据库文档。这个确实很好很强大,可以免除程序员的机械式的敲代码的工作。

 

(“主要实现在对应数据库中表的基类代码的自动生成,包括生成属性、添加、修改、删除、查询、存在性、Model类构造等基础代码片断,支持不同3种架构代码生成,使程序员可以节省大量机械录入的时间和重复劳动,而将精力集中于核心业务逻辑的开发。”

——摘自动软官网的介绍  )

 

  但是我们都知道,表的设计是根据客户的需求、业务逻辑、设计人员的项目经验设计的,其中最主要的是要受到关系型数据库自身的特点(所以nosql嘛)。表并不能完整体现业务需求,否则教会客户使用企业管理器(数据库的客户端软件)就可以了。直接把表交给客户用,那是不行的,否则程序员就集体失业了。

 

  总结一下,一般代码生成器的思路是:数据库表——代码——文档。

 

  而我这里说的思路是完全相反的:文档——代码——数据库——业务逻辑

 

  一般我们做项目的顺序是:调研,设计,编码,测试,上线。其中设计阶段要编写大量的文档,比如功能说明,各种流程图,领域设计,数据库设计,原型图等等。还要编制任务计划,团队分工合作。然后开始编码。编码的时候会发现,上一阶段的各种文档只能看,对于要编写的代码完全没有直接作用,必须要程序员进行“翻译”。把文档翻译成代码——于是乎苦逼的码农诞生了!

 

  而实际情况是,项目紧任务重时间还短。怎么办呢?文档可以没有或者后补,但是代码是不能没有的,所以往往文档就被忽略甚至完全被干掉了——这是文档和代码的矛盾点。

 

  怎么办呢?牺牲文档?下面要介绍一把双刃剑:可以让文档成为代码的助力!可以把码农从简单、机械、重复中解脱出来,但是同时也意味着不会再有“码农”这个岗位!

 

  还要从刚进入的这家公司说起。公司主营各种企业管理的项目,采用ABP架构最为底层,然后又进一步封装。

   简单的说,用EF的code frist做实体类,然后生成数据库,再根据业务需求设计Dto,有很多很多的Dto。页面用angularjs做总控和表单,kendoui做列表。存储部分至少定义一个接口,webapi部分也要定义一个接口。总之面向接口编程嘛。还有很多很多,逐步了解中。

 

  对于新人来说,最大的问题就是——这都哪跟哪呀。有了code frist,也就没有了数据库文档。有一大堆dto,但是这些dto都是啥功能?点开挨个看吧。

 

  看了两周还是蒙登。如果有一系列的文档说明该多好?但是大家都知道,任务紧工期短,哪有时间弄文档?

   好了又绕回来了,如果我们设计的文档可以自动生成代码,是不是一切就都迎刃而解了呢?

 

  数据库角度:先设计数据库文档,然后自动生成ef的code first 的实体类,然后用ef的数据库迁移功能建立表。然后生成默认的接口定义。这个没啥难度吧。

 

  业务角度:设计功能模块、页面,页面里面的数据列表、查询、分页、删除、表单等,然后根据这些设计生成对应的Dto,以及相关的接口,还有页面需要的代码。这样代码和文档就都有了。

 

  怎么样,一份设计实现两种功能(文档和代码)。这时候基本功能就都出来了。然后在生成的代码基础上做一些调整和优化,主要是页面方面。

 

  最后每个项目总会有些特殊的需求,我们就可以集中精力干掉它们了,

 

  对了,还可以生成测试用例,还有测试人员使用的测试平台也可以结合起来。

 

  现在您相信了吧:代码是设计出来的!

时间: 2024-11-09 03:07:18

文档驱动式代码设计器——代码是设计出来的!的相关文章

文档驱动式超敏捷开发

    敏捷开发大家都不陌生,他对文档的态度是偏向于反对,但是也不是说一点文档都没有.他的说法是 代替文档.   那么敏捷开发为什么会这么认为呢?其实大家在做项目开发的时候都会有这样的体会:   时间紧任务重,哪有时间写文档呀?代码都写不过来. 辛辛苦苦把文档写好了,但是但是项目才进行一小半好不好,需求怎么就变了呀!需求变了,代码都改不过来,那还有时间去修改文档呀?于是乎一开始写好的文档就变成了一个个的坑.默默的坑着后来的人.   于是就有了这样的现象: 当接手一个遗留项目的时候最希望的就是有文

事情是这样的,我刚来这个公司不久,要维护一个系统,是基于C++,CORBA的服务器系统,写的好大好复杂,仅服务器这边就有10多个进程,而且没有任何文档,没有任何说明,代码乱七八糟,没注释,说是面向对象C++编写,可全局变量到处都是,类里边全是public变

问题描述 事情是这样的,我刚来这个公司不久,要维护一个系统,是基于C++,CORBA的服务器系统,写的好大好复杂,仅服务器这边就有10多个进程,而且没有任何文档,没有任何说明,代码乱七八糟,没注释,说是面向对象C++编写,可全局变量到处都是,类里边全是public变量.现在人家客户用的时候出问题了,客户端每调用一次服务端,服务端内存就增长几十兆,而且没有任何性能测试工具可用,开发这个程序的人都走了.大家说面对这种复杂系统的内存泄漏问题,在没有性能测试工具的情况下该怎么办,怎么找出问题在哪,想用L

C#.Net组件开发 - 使用Attach to Process实时调试设计器代码(转)

本文转载于:CS框架网http://www.csframework.com/archive/2/arc-2-20110829-1811.htm C#.Net组件开发 - 使用Attach to Process实时调试设计器代码 组件设计的调试对象为两个:一是我们关注的组件本身(Component/Control),二是组件的设计器(Component Designer/Control Designer).调试组件本身只要设断点运行程序即可调试,因组件设计器在设计时工作而不是运行时,所以设断点是不

开发基于Web的CSS设计器.代码参考

css|web|参考|设计 这里对前面文章讲的CSS设计器系统关键代码作一些小结,如果没有看过前面文章的请先参看"开发基于Web的CSS设计器" 解析CSS样式文件 这段代码主要作用是把CSS文件分解为多个样式类,并按名称/文本属性生成ClassItem对象,并保存在一个ArrayList(cssList)中(C#代码) //读取文件FileInfo theSource= new FileInfo (@m_filePath);StreamReader reader = theSourc

JS实现文档加载完成后执行代码_javascript技巧

在执行某些操作的时候,需要当文档完全加载完成之后再去执行,否则可能出现意向不到的情况,先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title></title> <style type="text/css"> div{ width:200px; height:200px; } </style&g

php把读取xml 文档并转换成json数据代码

/* <?xml version='1.0' encoding='utf-8' ?> <root cityid="0" classid="0" placeid="0" yy="0" mm="0" pg="1" ps教程="20" maxPage="1" num="1" serverIP="58.57.

[文档]基于Hadoop 平台的数据分析方案的设计应用

基于Hadoop 平台的数据分析方案的设计应用 姜文,辛阳,陈林顺 摘要:面对互联网上的海量数据,单台主机已无法满足其存储和计算要求,分布式存储和分布式计算的应用成为必然的趋势.其中Hadoop 是应用较多的分布式存储和计算框架之一.本文在该平台下,通过对国内某搜索引擎两个月内的上千万条用户搜索日志进行数据统计分析,给出相应Map/Reduce 程序的设计思路和实例,并提出Map/Reduce 分布式程序的部分设计和性能优化方法,实验结果表明,本文提出的这些方法能简化Map/Reduce 程序设

如何用C#写所见即所得的设计器

设计 摘要     本文讨论了如何使用C#编写一个所见即所得的设计器,分析了设计器的基本原理,可能遇到的技术问题,以及如何调用.NET框架来实现一个设计器. 版权声明   本文是XDesigner软件工作室撰写,XDesigner软件工作室拥有本文版权,转载请注明出处,并保留本版权声明. 前言 随着计算机信息系统不断深入发展,其系统结构要求越来越灵活,这种灵活性就是表现为程序的高度可配置性,可能应用程序的工作流程可以随便改变,用户界面也可以随便改变,面对这种不断增强的灵活,是不可能通过修改程序代

用.NET实现所见即所得的设计器

设计 摘要 本文讨论了如何使用C#编写一个所见即所得的设计器,分析了设计器的基本原理,可能遇到的技术问题,以及如何调用.NET框架来实现一个设计器. 版权声明 本文是XDesigner软件工作室撰写,XDesigner软件工作室拥有本文版权,转载请注明出处,并保留本版权声明. 前言 随着计算机信息系统不断深入发展,其系统结构要求越来越灵活,这种灵活性就是表现为程序的高度可配置性,可能应用程序的工作流程可以随便改变,用户界面也可以随便改变,面对这种不断增强的灵活,是不可能通过修改程序代码来实现的,