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

简介:   代码是敲出来的吗?是批量生成出来的吗?     No no no,代码是设计出来的!     如果说到代码生成器,大家可能会想到三层、动软代码生成器、数据库表等等。其一般的思路是,先有数据库然后根据库里的表自动生成一系列的代码,包括实体类、持久化、业务层(空函数)、页面代码等,还可以生成数据库文档。

 

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

 

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

 

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

 

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

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

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

 

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

 

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

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

 

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

 

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

 

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

 

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

 

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

 

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

相关文章
|
8月前
|
API 开发工具 数据库
OneCode2.0源码结构分析
OneCode12月10日正式更新了其V2.0版本。从OneCode的季度版本生命中,可以看到2.0版本还是一个重量级的版本,笔者在收到2.0更新后第一时间下拉了最新的代码。在参考了OneCode 的技术说明后,根据包结构来分析一下OneCode2.0的结构。
|
存储 缓存 监控
《优化接口设计的思路》系列:第二篇—接口用户上下文的设计与实现
大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 作为一名从业已达六年的老码农,我的工作主要是开发后端Java业务系统,包括各种管理后台和小程序等。在这些项目中,我设计过单/多租户体系系统,对接过许多开放平台,也搞过消息中心这类较为复杂的应用,但幸运的是,我至今还没有遇到过线上系统由于代码崩溃导致资损的情况。这其中的原因有三点:一是业务系统本身并不复杂;二是我一直遵循某大厂代码规约,在开发过程中尽可能按规约编写代码;三是经过多年的开发经验积累,我成为了一名熟练工,掌握了一些实用的技巧。
127 0
|
5月前
|
测试技术
测试与开发问题之测试用例设计的重点是什么,如何实现
测试与开发问题之测试用例设计的重点是什么,如何实现
|
7月前
|
Java 数据安全/隐私保护
JavaSE——基础小项目-模拟ATM系统(项目主要目标、技术选型、架构搭建、具体实现、完整代码注释)(二)
JavaSE——基础小项目-模拟ATM系统(项目主要目标、技术选型、架构搭建、具体实现、完整代码注释)(二)
196 0
|
7月前
|
Java API 数据安全/隐私保护
JavaSE——基础小项目-模拟ATM系统(项目主要目标、技术选型、架构搭建、具体实现、完整代码注释)(一)
JavaSE——基础小项目-模拟ATM系统(项目主要目标、技术选型、架构搭建、具体实现、完整代码注释)(一)
145 0
|
8月前
|
存储 前端开发 JavaScript
软件设计文档编写指南
软件设计文档编写指南
|
8月前
|
编解码 缓存 数据库
【软件设计师备考 专题 】编写内部设计文档:屏幕设计和数据库设计
【软件设计师备考 专题 】编写内部设计文档:屏幕设计和数据库设计
140 0
|
8月前
|
自然语言处理 搜索推荐 算法
Metaforce佛萨奇2.0丨3.0系统开发稳定版/需求设计/功能说明/案例项目/逻辑方案/源码程序
Metaforce佛萨奇系统是一个基于人工智能技术的虚拟助手系统,
|
Java 编译器 应用服务中间件
代码开发优化细节
带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50% 。
217 2
代码开发优化细节
|
设计模式 传感器 API
在编写RTOS代码时,如何设计一个简单、优雅、可拓展的任务初始化结构?
在编写RTOS代码时,如何设计一个简单、优雅、可拓展的任务初始化结构?
155 0

热门文章

最新文章

下一篇
开通oss服务