数据建模与框架设计的暂时总结

摘要:
现在,我们似乎可以得出这样的结论:数据模型+框架=操作系统。我们还可以根据业务需求从技术层面到业务层面设计框架。现在我们可以回到上面的等式数据模型+框架=可运行系统。从这个方程出发,我们可以分别从数据模型和框架的角度来设计程序。

在这次项目开发实践中,我又一次尝试用Python脚本生成C#代码,其效果让我很满意 -- 提高了代码质量,可维护性和工作效率;同时降低了出错率。

看来事情在向好的方面发展。那么促成的因素是什么?我思考了一下,可能有以下2点:

  1. 在用脚本生成代码方面积累的实践技术经验
  2. 在运用第1点时,让我感受到了“数据建模”和“框架设计”

回忆这次设计过程,我首先识别了下面几个部分的数据:

  1. 前端展示数据
  2. 业务层数据
  3. 数据层数据

通过一个Excel表格,将这三层数据定义出来,然后再用脚本生成代码。但是,由于这次的业务不复杂,因此,这三层数据都定义在了一个表格中。

当完成这部分工作之后,再往回看,这个过程不就是数据建模过程吗?

当表格定义完成后,再根据表格中的定义去写Python脚本,生成前端展示层,业务层和数据层的代码。而这些生成的代码,实际上都是代表特定功能的函数代码。

这里我想到了常见MVC框架,MVC框架不也是提供了一套完整的函数实现了访问请求和内容展现吗?实际上再扩大一些,框架做的都是这个事情。

现在,似乎可以得出这个结论:

数据模型 + 框架 = 可运行的系统。

这是一个很简单的等式,展现在我们眼前的景象是我们的日常开发工作就是把数据模型建好,然后把它们塞进框架中,这样我们就可以休息了。如果你真的相信这幅景象,那说明你被暂时洗脑了。

在我们的项目中,处处都是包含有成百上千行代码的cs文件,随便打开一个存储过程就有上千行的代码,它们是bug的温床,像噩梦一般时时困扰着我们。那这些代码是什么代码?

我认为,这些代码可以被分为下面两种:

  1. 业务逻辑转换的代码
  2. 让框架识别数据的代码

业务逻辑转换的代码,最突出的如以下代码

条件分支

if (businessType == 'Rental')
{
    ....
}
else if(businessType == 'Lease')
{
    ....
}
else
{
    ....
}

适配转换

public string FirstName{get;set;}

public string LastName{get;set;}

public string FullName{return FirstName + " " + LastName;}

上面的代码仅仅反应的业务逻辑。几乎不涉及任何技术。

让框架识别数据的代码,典型的如下的数据库访问

using(var cmd = con.CreateCommand()){
    cmd.CommandText = "sp_XXX";
    cmd.Parameters.Add(....);
    using(var reader = cmd.ExecuteReader())
    {
        ...
    }
}

上面的代码告诉ADO.net框架,我们要调用存储过程,并为其设置参数。

但是通常的情况下,我们很容易会将上面两种代码混合起来,并很容易认为这是理所当然的。

但是,很快,有人意识到了问题,开发出来了ORM框架,比如NHibernate,Entity Framework等等。这样,框架识别数据的代码变成了下面这样。

[Table("T_Customer")]
public class Customer{
    [Column("FIRSTNAME")]
    public string FirstName{get;set;}
    ...
}

 这是一个开始,但不是结束。我们对框架的设计还可以根据业务需要,将框架的设计从技术层面向业务层面推进。

因此现在可以再次回到上面那个等式

  数据模型 + 框架 = 可运行的系统

 我们可以从这个等式出发,分别从数据模型和框架的角度去设计程序。

免责声明:文章转载自《数据建模与框架设计的暂时总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS开发之排序方法比较(转)菜鸟学数据库(二)——触发器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Django的框架模式——MTV

Django采用了 MTV 的框架模式,即模型(Model)、模板(Template)和视图(Views),三者之间负责不同的职责。 模型:数据存储层,处理与数据相关的所有事务,例如如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。负责业务对象与数据库的对象(orm)。 模板:表现层,处理与表现相关的决定,例如如何在页面或其他类型的文档...

浅谈如何设计自动化测试框架

关于测试框架的好处,比如快速回归提高测试效率,提高测试覆盖率等这里就不讨论了。这里主要讨论自动化框架包含哪些内容,以及如何去设计一个测试框架。 1. 什么是自动化测试框架? 它是由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合。 以常见的前端UI测试为例,一个测试框架大概包括测试对象,测试组件,基础类和函数,工具类,测...

【UEFI】---BIOS中UserPassword的重复校验总结

  UEFI作为目前较为流行的一套X86架构初始化的标准框架,已受到业界内的广泛认可。而其中很多编程所采用的思想确实值得学习。今天总结下UEFI的框架下修改代码的一点小经验,仅供菜鸟参考。 先列干货,具体的小结后续补充:   1. 明确你要的某个功能的实现逻辑,都需要在哪个位置添加代码。     (很重要,这决定着你的方案是否可行重要前提,一旦此步骤错误,...

javascript流行框架

1. jQuery – Javascript框架 应用最广泛的JavaScript框架,jQuery插件非常之多,涉及LightBox灯箱插件、日期插件、图表插件等各种类型的插件不计其数,OsChina就收录了1000多款jQuery插件。 2. Dojo Javascript框架 Dojo是一个强大的面向对象JavaScript框架。主要由三大模块组成:C...

CI框架的事务开启、提交和回滚

1.运行事务 $this->db->trans_start();  // 开启事务$this->db->query('一条SQL查询...');$this->db->query('另一条查询...');$this->db->query('还有一条查询...');$this->db->trans_c...

从零开始手写 dubbo rpc 框架

rpc rpc 是基于 netty 实现的 java rpc 框架,类似于 dubbo。 主要用于个人学习,由渐入深,理解 rpc 的底层实现原理。 前言 工作至今,接触 rpc 框架已经有很长时间。 但是对于其原理一直只是知道个大概,从来没有深入学习过。 以前一直想写,但由于各种原因被耽搁。 技术准备 Java 并发实战学习 TCP/IP 协议学习笔记...