阅读好的开源软件,是使自己的编码能力大增的方法之一。开源软件的项目有时非常大,如何阅读开源软件是有技巧可循的。

掘金有很多这样的文章,然而本文系列尝试就自己的一些心得和大家共享,以达到抛砖引玉的作用。本文先就ERD做些简单的说明。

概论

ER(entity relationship) 模型通常是系统分析的结果,用于定义和描述对业务领域中的流程重要的内容。它没有定义业务流程;它仅以图形形式呈现业务数据模式。它通常以图形形式绘制为由线(关系)连接的框( 实体 ),这些线( 关系 )表示实体之间的关联和依赖关系。ER 模型也可以用语言的形式表达,例如:一栋楼可以分成零个或多个公寓,但一个公寓只能位于一栋楼里。

实体不仅可以通过关系来表征,还可以通过附加属性( 属性 )来表征,其中包括称为“主键”的标识符。创建来表示属性以及实体和关系的图可以称为实体-属性-关系图,而不是实体-关系模型。

ER 模型通常作为数据库实现。在简单的关系数据库实现中,表的每一行代表一个实体类型的实例,表中的每个字段代表一个属性类型。在关系数据库,实体之间的关系是通过将一个实体的主键作为指针或“外键”存储在另一个实体的表中来实现的。

ERD 例子

ERD(entity relationship diagram) 就是ER的图形表示。ERD会更直接地帮助你理解ER,从而更好地把握一些开源项目。

我以spree为例子来说明。

spree是比较出名的电子商务开源软件,类似shopify。让我们来生成一个ERD。

git clone git@github.com:spree/spree_starter.git
cd spree_starter
bundle add rails-erd
bundle
复制代码

在ios平台需要安装 graphviz

brew install graphviz
复制代码

都安装好了以后执行

改相应的config/database.yaml 配置数据库,并创建相应的数据库

然后执行

bundle exec rake db:migrate
复制代码
bundle exec erd --notation=simple --direct  --orientation=vertical --splines=ortho --connected --attributes=false
复制代码

就可以看到如下的图

如果执行这个

 bundle exec erd --notation=simple --direct  --orientation=vertical --splines=ortho --connected
复制代码

会看到这个

问题来了,太多的entity model, 很难看清谁连的谁, 我做了一个基本的改进:增加了颜色。操作如下:

把根目录的Gemfile 找到 rails-erd 那行改成

gem 'rails-erd', github: "williamhatch/rails-erd"
复制代码

保存。在命令行执行

bundle
bundle exec erd --notation=simple --direct  --orientation=vertical --splines=ortho --connected
复制代码

会得到

如果执行

bundle exec erd --notation=simple --direct  --orientation=vertical --splines=ortho --connected --attributes=false
复制代码

会得到

颜色的区分是否更加清楚 :)

下一步思路:

  1. 用yaml格式定义实体和实体之间的关系,然后自动生成rails的model,并生成ERD(彩色的)
  2. 或者用UI(web base的)通过拖拽生成yaml,然后再自动生成rails的model,并生成ERD(彩色的),这个可以参考strapi的admin dashboard。
  3. 做个web base的UI (基于nuxt3),可以选择(勾选)模块,只生成相关的模块的ERD。
  4. 最终的目标是用户只要在web拖拽,就可以实现建模,自动生成restful的api和graphql的api,加上简单配置,可以支持认证和log功能。这样后端基本就是DDD(domain driven design)。后续有机会会陆续介绍这方面的心得。

有兴趣的同学可以在下面留言,并关注我的。

链接:https://juejin.cn/post/7037627476897431565

如何更好地读开源软件之一:ERD工具简介相关推荐

  1. Google 释出开源软件漏洞扫描工具 OSV-Scanner​

    开源开发人员可在项目使用 OSV-Scanner,透过比对依赖项目和 OSV 漏洞资料库,找出项目的依赖项目中所存在的漏洞. Google 推出免费工具 OSV-Scanner(https://git ...

  2. 开源软件执照检查和工具探讨(Discuss the audit tools for open source license GPL/LGPL/MIT)

    1前言 Open source 的代码越来越多的被商业化应用起来,有时候,项目的构建里面开源代码会引用一堆开源代码,而这些开源代码的软件执照并不相同.最恶劣的情况就是,你不小心在你的商用软件里面增加了 ...

  3. 纠删码开源软件Jerasure库接口简介及性能测试

    原文见链接基于柯西矩阵的Erasure Code技术详解 原文见链接基于范德蒙矩阵的Erasure code技术详解 原文见链接一个IO的传奇一生(12)-- 磁盘阵列1 原文见链接Microsoft ...

  4. 最受 IT 公司欢迎的 30 款开源软件

    来源: http://www.360doc.com/content/20/0613/14/49290572_918245894.shtml 所谓开源,就是把软件的源代码开放出来,大家都能看到源代码,大 ...

  5. 开源软件 安全风险_3开源安全风险及其解决方法

    开源软件 安全风险 Open source software is very popular and makes up a significant portion of business applic ...

  6. 金融行业开源软件研究评测报告——JSON组件

    背景 JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,简洁和清晰的层次结构使得JSON成为理想的数据交换语言.在业务系统中,JSON组件作为数据转换和处理的重要环 ...

  7. 最受IT公司欢迎的 30 款开源软件

    来源:360doc.com/content/20/0613/14/49290572_918245894.shtml 所谓开源,就是把软件的源代码开放出来,大家都能看到源代码,大家可以一起研究源代码并对 ...

  8. 2020 最受 IT 公司欢迎的 30 款开源软件

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

  9. 最受 IT 公司欢迎的 30 款开源软件,你用过几个?

    来源: http://www.360doc.com/content/20/0613/14/49290572_918245894.shtml 所谓开源,就是把软件的源代码开放出来,大家都能看到源代码,大 ...

  10. 最受 IT 公司欢迎的 30 款开源软件,你用过几款?

    大家好,我是宝哥! Part1 web服务器 1.Nginx Nginx (engine x) 是俄罗斯人开发出来的一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP ...

最新文章

  1. curl: (3) [globbing] error: bad range specification after pos 150的解决方法
  2. XMind安装/注册完整教程
  3. Keras之DNN::基于Keras(sigmoid+binary_crossentropy+predict_classes)利用DNN实现二分类——DIY二分类数据集预测新数据点
  4. 你所需要的java基础篇深入解析大汇总
  5. 恶意代码入门知识汇总
  6. MySQL查看SQL语句执行效率和mysql几种性能测试的工具
  7. Sublime Text 2安装插件的方法
  8. jmap简单实用示例
  9. python英文词频统计去除定冠词_使用Python进行英文词频统计
  10. 从零开始学前端:对象序列化与反序列化、冒泡排序、数组去重 --- 今天你学习了吗?(JS:Day11)
  11. ajax调用webService
  12. 利用detours实现API劫持
  13. 概率分布-beta分布
  14. mysql实现周月表_Mysql,Mybatis做时间过滤报表:日周月统计
  15. yarn : 无法加载文件 C:\Users\wangxin67\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.mic
  16. Linux: setcap/getcap, capability
  17. python学习之文件
  18. ABAP 调用migo
  19. linux命令Istat,用dde-istate-menus实现在Deepin V20中Istat Menus(macOS)的多数功能
  20. 视频教程-卡通人物绘画教程---成品-原画设计

热门文章

  1. 怎么测试网站访问速度?
  2. react-router-dom文档
  3. 东大计算机硕士奖学金,【信息学院硕士研究生第二学年普通奖学金评定方案】...
  4. Python+appium app自动化
  5. 什么是图床如何搭建图床
  6. 计算机程序设计员国家职业资格三级(高级)操作技能考核试卷-四川考场
  7. apt-get 安装失败:Unable to correct problems, you have held broken packages
  8. 最新安卓JAVA模拟器_安卓java模拟器完美版下载-安卓java模拟器直装最新版下载v1.4.6 - 欧普软件园...
  9. 1096: 水仙花数(函数专题,多实例)(细节较多)
  10. 健身教练教你跑步减肥的正确方法