软件工程
文章平均质量分 51
frcoder
FRLH
展开
-
工程代码架构
接口层api是程序的入口,供外部调用,处理所有输入:校验参数、转换参数、限流、加锁业务层biz处理具体业务,为每个业务建一个文件夹只处理核心逻辑,应该是和流程图、时序图一一对应的,图中体现不出来的处理,就不应该放在这个层,比如:对象转换外部接口层external依赖的第三方接口,要处理:参数转换,返回结果转换,异常处理,风险隔离,日志,监控,埋点对象层model业务对象domain枚举类enums异常类exception持久化persistence管理层manager将entry处原创 2022-03-16 23:00:09 · 4539 阅读 · 1 评论 -
PlantUML教程及主题模板
plantuml教程:https://plantuml.com/zh/sequence-diagramplantuml在线工具:https://www.planttext.comFRLH主题:https://puml.littletools.ml/theme/frlh.style流程图状态图附录:样式表附录:颜色表原创 2021-08-03 23:27:11 · 6710 阅读 · 1 评论 -
对于设计模式的理解
设计模式实际上就六个字:高内聚,低耦合一、设计模式的六大原则单一职责接口隔离原则(Interface Segregation Principle)这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。最少知道原则,又称迪米特法则(Demeter Principle)最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统.原创 2020-11-26 14:42:24 · 497 阅读 · 0 评论 -
对领域驱动设计DDD(Domain-Driven Design)的理解
软件工程出现以来,人们一直在寻找一种简洁的系统组织方式及交互方式。传统的系统设计是命令式交互,系统对外提供了哪些操作命令,即系统对外提供了哪些接口。系统的设计是围绕着接口进行的,对接口的实现就是对这些命令的实现,用户通过接口来修改系统的状态(包括系统中存储的数据)。对于非编程人员来说,只能看到系统所提供的接口,“看不到”系统内部的实现。系统分析和设计是分开的,导致需求和成品非常容易出现偏差,两者相对独立,还会导致沟通困难。DDD 则打破了这种隔阂,领域模型概念统一了分析和设计编程,使得软件能够更灵活快速原创 2020-11-25 01:14:32 · 432 阅读 · 0 评论 -
项目重构过程中的思考
一、老项目一般具有2个特点,导致不可维护1. 自顶向下整个项目只能以对外接口为入口去梳理才能看的懂,如果直接看内部结构会发现是杂乱无章的,没有统一的规划,没有考虑复用性,没有自下向上的设计。整个项目是一个枝杈繁多的倒着的树。2. 补丁化项目随着时间的推移,会逐渐变得补丁化,后来者总是倾向于“最小改动”,尽量不动整体逻辑,不然还得整体回归测试,担心会引入新的问题。二、重构的关键重新理解业务逻辑考虑采用统一的逻辑来处理整个流程标准化各个环节工具化公共小逻辑三、重构对项目维护的反思在维原创 2020-06-17 11:23:50 · 471 阅读 · 0 评论 -
RESTful API 命名设计
业务背景频道分类下有频道频道分类有:体育、电影、电视剧,这三类(与频道分类是上下级关系)同时频道分类有国内(只能看电影、电视剧)、国外(只能看体育、电影)两个版本(与频道分类是修饰限定关系)1. api中只应该含有名词,名词表示资源/v1/channel-categories 获取所有频道分类channel和categories,虽然channel是用来修饰categories的,但是...原创 2020-04-14 10:03:12 · 531 阅读 · 1 评论 -
软件工程中的各种优先级
bug的优先级致命:线上问题严重:阻碍测试的bug正常:本次迭代的主要功能出现bug微小:在本次迭代中测出来的bug,和本期迭代功能相关,但不是主要功能,也要求在这次迭代内修改改进:有点问题,建议优化,但是不着急,可以不在本次迭代中修改,等有空了再看...原创 2020-03-19 21:04:03 · 1207 阅读 · 0 评论 -
软件工程中各类角色关心的文档
使用系统的人:一般只关心接口,最多再关心一下数据流(即接口返回的各个字段是从哪里来的,经历了哪些过程)。实施系统的人:一般希望看到类图,时序图,流程图。设计系统的人:一般需要关心架构图,非功能性指标。架构师:负责顶层设计,产出架构图。高级研发人员:负责详细设计,主要工作是写文档,产出接口设计,数据库设计,数据流,类图,时序图,流程图。初级研发人员:负责实现,主要工作是写代码,实现高级研发...原创 2020-02-12 10:38:03 · 1042 阅读 · 0 评论 -
隔壁老王与契约精神
有两个院子挨着,一家是老王,一家是小李。这两个院子只有一墙之隔。过了一段时间,不明原因地,老王家的院子里多了好多垃圾。然后老王找小李展开了以下对话。老王:“兄弟,把咱们两家中间的那堵墙往,你们那边挪一点呗。”小李:“为啥?”老王:“我们院子里垃圾太多了,装不下了。”小李:“你们把垃圾扔掉不就行了么?”老王:“太多了,一时半会打扫不完。”小李:“多派几个人一起打扫啊。”老王:“哎呀,家...原创 2019-05-27 10:02:51 · 818 阅读 · 0 评论 -
寻找jira的最佳实践
1. 活动story是给产品用的,story也可以建立sub-task,但是这个sub-task本质上的对story的分解,应该被命名为sub-story;task是给研发组长用的,可以给每个story去建议一个或多个task,包括开发、联调、测试的task,研发人员再用sub-task来分解具体的task;test和bug是给测试用的,测试人员从story开始建立test用于测试计划,再...原创 2019-02-27 11:58:10 · 3155 阅读 · 0 评论 -
说文解字
1. ‘-’ 与 ‘_’‘-’:中横线(连字符),用于分割,表示连在一起的这些字不是一个词; ‘_’:下划线,用于连接,表示连在一起的这些字是一个词。 在给分支命名时,应该使用中横线,如develop-XXX-XXX...原创 2018-05-25 09:31:28 · 463 阅读 · 0 评论 -
系统中各个版本号之间的关系
系统中常见版本号及最佳实践api版本号(主版本号.次版本号.修订号)git_tag号(主版本号.次版本号.修订号.发布号)flyway_db脚本命名规则([V/U]主版本号.次版本号.修订号_[日期]_[当天序号]__[脚本说明].sql)说明:1. api的版本号命名规则参见《接口(Api)版本号命名规则》2. 发布号,从0开始依次递增,每次发布时应该在打tag时记录更新或修复的...原创 2018-12-27 17:57:03 · 625 阅读 · 0 评论 -
程序员需要具备的能力
一、编程能力体现:点:算法(解决问题的能力)线:设计模式(组织代码的能力)面:对常见框架的理解和学习(搭建工程项目的能力)体:对操作系统和计算机网络等基础理论的学习与实践(理解计算机世界的能力)二、业务能力体现:理解问题或需求的能力沟通和协调资源的能力预估和安排计划的能力调研和解决问题的能力...原创 2018-11-08 09:47:03 · 9272 阅读 · 1 评论 -
对项目管理和软件开发过程的感受和理解
即便是内部开发也要有一个交付的过程,比如一个开发交付给另一个开发,开发交付给测试,开发交付给运维。交付的过程,实际上是验收的过程,这就要求交付的系统是完整的,文档化的,边界清晰的。在交付过程中发现的bug,在本迭代中解决;发现的问题,觉得需求、设计不合理的,记录到文档里,将成为下个迭代的方向。交付意味着本次迭代结束,只要产品符合本次迭代的需求即可产品绝不仅仅是归纳和整理需求,更多的修建和...原创 2018-11-07 11:07:36 · 4048 阅读 · 0 评论 -
关于后台分工的思考
对于开发团队的后台工作,建议这样分工:接口和model交给一个熟悉业务的人来写,service交给一个基本功扎实的人来写,controller交给一个擅长沟通的人来写。model层是整个项目的基石,一定要有充足的宁愿冗余的注释,并且各个model中的字段含义一定要保持一致。不要一会code,一会id,一会有是shortName,model层中给人造成的困惑会影响整个项目。接口层也一定要有充足的注释,原创 2017-12-08 10:19:45 · 589 阅读 · 0 评论 -
接口(Api)版本号命名规则
0. 前言 版本号的命名和更新问题,是开发者的责任感和前瞻性的问题。1. 项目立项时 版本格式:0.0.02. 开发阶段时此时系统尚不稳定,随时可能增减或者修正API。 版本格式:0.次版本号.修订号,版本号递增规则如下: 主版本号:0表示正在开发阶段; 次版本号:当接口发生变更,不兼容之前版本时增加; 修订号:在接口兼容的情况下,只要有改动就增加。3. 开发完成后原创 2017-12-06 15:32:32 · 23485 阅读 · 0 评论 -
关于Axure+SVN协同工作的术语解释
签入:如果是远程文件则直接同步到svn服务器上的远程副本;如果是本地文件则先转化为远程文件再同步到svn服务器上的远程副本。签入后会失去文件的编辑权限。(既可以操作本地文件,也可以操作远程文件)签出:使远程文件获得svn服务器上的远程副本的最新更新,并获得编辑权限。(只能操作远程文件)提交所有变更到团队目录:把远程文件的更新同步到到svn服务器上的远程副本,文件的编辑权限不变。(只对远程文件有效,对本地文件无效)从团队目录获取所有变更:把svn服务器的远程副本同步到远程文件,文件的编辑权限不变。原创 2016-11-03 22:34:51 · 3093 阅读 · 0 评论