如何更好地读开源软件之一:ERD工具简介
阅读好的开源软件,是使自己的编码能力大增的方法之一。开源软件的项目有时非常大,如何阅读开源软件是有技巧可循的。
掘金有很多这样的文章,然而本文系列尝试就自己的一些心得和大家共享,以达到抛砖引玉的作用。本文先就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
复制代码
会得到
颜色的区分是否更加清楚 :)
下一步思路:
- 用yaml格式定义实体和实体之间的关系,然后自动生成rails的model,并生成ERD(彩色的)
- 或者用UI(web base的)通过拖拽生成yaml,然后再自动生成rails的model,并生成ERD(彩色的),这个可以参考strapi的admin dashboard。
- 做个web base的UI (基于nuxt3),可以选择(勾选)模块,只生成相关的模块的ERD。
- 最终的目标是用户只要在web拖拽,就可以实现建模,自动生成restful的api和graphql的api,加上简单配置,可以支持认证和log功能。这样后端基本就是DDD(domain driven design)。后续有机会会陆续介绍这方面的心得。
有兴趣的同学可以在下面留言,并关注我的。
链接:https://juejin.cn/post/7037627476897431565
如何更好地读开源软件之一:ERD工具简介相关推荐
- Google 释出开源软件漏洞扫描工具 OSV-Scanner
开源开发人员可在项目使用 OSV-Scanner,透过比对依赖项目和 OSV 漏洞资料库,找出项目的依赖项目中所存在的漏洞. Google 推出免费工具 OSV-Scanner(https://git ...
- 开源软件执照检查和工具探讨(Discuss the audit tools for open source license GPL/LGPL/MIT)
1前言 Open source 的代码越来越多的被商业化应用起来,有时候,项目的构建里面开源代码会引用一堆开源代码,而这些开源代码的软件执照并不相同.最恶劣的情况就是,你不小心在你的商用软件里面增加了 ...
- 纠删码开源软件Jerasure库接口简介及性能测试
原文见链接基于柯西矩阵的Erasure Code技术详解 原文见链接基于范德蒙矩阵的Erasure code技术详解 原文见链接一个IO的传奇一生(12)-- 磁盘阵列1 原文见链接Microsoft ...
- 最受 IT 公司欢迎的 30 款开源软件
来源: http://www.360doc.com/content/20/0613/14/49290572_918245894.shtml 所谓开源,就是把软件的源代码开放出来,大家都能看到源代码,大 ...
- 开源软件 安全风险_3开源安全风险及其解决方法
开源软件 安全风险 Open source software is very popular and makes up a significant portion of business applic ...
- 金融行业开源软件研究评测报告——JSON组件
背景 JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,简洁和清晰的层次结构使得JSON成为理想的数据交换语言.在业务系统中,JSON组件作为数据转换和处理的重要环 ...
- 最受IT公司欢迎的 30 款开源软件
来源:360doc.com/content/20/0613/14/49290572_918245894.shtml 所谓开源,就是把软件的源代码开放出来,大家都能看到源代码,大家可以一起研究源代码并对 ...
- 2020 最受 IT 公司欢迎的 30 款开源软件
点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...
- 最受 IT 公司欢迎的 30 款开源软件,你用过几个?
来源: http://www.360doc.com/content/20/0613/14/49290572_918245894.shtml 所谓开源,就是把软件的源代码开放出来,大家都能看到源代码,大 ...
- 最受 IT 公司欢迎的 30 款开源软件,你用过几款?
大家好,我是宝哥! Part1 web服务器 1.Nginx Nginx (engine x) 是俄罗斯人开发出来的一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP ...
最新文章
- curl: (3) [globbing] error: bad range specification after pos 150的解决方法
- XMind安装/注册完整教程
- Keras之DNN::基于Keras(sigmoid+binary_crossentropy+predict_classes)利用DNN实现二分类——DIY二分类数据集预测新数据点
- 你所需要的java基础篇深入解析大汇总
- 恶意代码入门知识汇总
- MySQL查看SQL语句执行效率和mysql几种性能测试的工具
- Sublime Text 2安装插件的方法
- jmap简单实用示例
- python英文词频统计去除定冠词_使用Python进行英文词频统计
- 从零开始学前端:对象序列化与反序列化、冒泡排序、数组去重 --- 今天你学习了吗?(JS:Day11)
- ajax调用webService
- 利用detours实现API劫持
- 概率分布-beta分布
- mysql实现周月表_Mysql,Mybatis做时间过滤报表:日周月统计
- yarn : 无法加载文件 C:\Users\wangxin67\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.mic
- Linux: setcap/getcap, capability
- python学习之文件
- ABAP 调用migo
- linux命令Istat,用dde-istate-menus实现在Deepin V20中Istat Menus(macOS)的多数功能
- 视频教程-卡通人物绘画教程---成品-原画设计
热门文章
- 怎么测试网站访问速度?
- react-router-dom文档
- 东大计算机硕士奖学金,【信息学院硕士研究生第二学年普通奖学金评定方案】...
- Python+appium app自动化
- 什么是图床如何搭建图床
- 计算机程序设计员国家职业资格三级(高级)操作技能考核试卷-四川考场
- apt-get 安装失败:Unable to correct problems, you have held broken packages
- 最新安卓JAVA模拟器_安卓java模拟器完美版下载-安卓java模拟器直装最新版下载v1.4.6 - 欧普软件园...
- 1096: 水仙花数(函数专题,多实例)(细节较多)
- 健身教练教你跑步减肥的正确方法