就目前而言,就我的理解,为什么要设计结构清晰的代码呢,因为结构清晰的代码往往耦合度很低,那为什么要降低代码之间的耦合度呢,当然是因为程序员是一种喜爱偷懒和害怕犯无意义错误的一种生物,那么该怎么办呢,无论怎么实现代码,都有轻度耦合的可能性,那么怎么破呢?

追本溯源,为什么这个低耦合的名词会被发明出来,因为需要便于模块分离,要是模块分离的时候,比如说代码需要进行重构,那么重构这个小游戏的趣味性就会降低。另外,低耦合的代码可以在一定程度上可以减少bug出现时傻子都会做的重复修改代码劳动。

最近的项目中,当使用到模块上传时,尝试使用APT的方式从每个模块中获取模块信息,并动态生成对应的代码内容,这样的方式个人感觉其实在一定程度上解决了耦合度问题,因为generated的代码每次编译之后都会重新生成,只要APT生成的代码逻辑没有问题,就一般不会出错,问题从本质上被解决了。

但是呢,有没有感觉这样的方式依然不够酷炫。有没有更好的方式能实现同样的结果呢?

我尝试玩玩新的花样,我记得我以前一直有一个想法,其实感觉所有的界面都可以按照类别进行分类,比如说列表,编辑界面,查看界面,很多时候用户在使用这些界面的时候所执行的操作其实完全一样,无非是往下滑动还是为列表中添加新的列表项内容等等,我完全可以将所有的界面操作逻辑看作一棵操作逻辑树,将所有的视图绘制逻辑看作一颗视图绘制逻辑树(当然,在这里面需要设置对应的点击事件以及数据传递结果),这两者之间的关系和visitor模式中两个角色之间的关系其实很类似,唯一的区别是指责不同。这两棵树都是对于逻辑的封装,而具体的实现并不在这两者之上实现。

两棵树的父节点和子节点之间的关系无论是通过装饰者模式还是通过纯继承的方式其实真的无所谓,因为实现这两棵树的唯一目的是为了尽可能减少重复逻辑的执行,如果遇到新的页面逻辑,只需要在操作逻辑树上找到最大程度上实现当前功能的节点,在他的基础上创建子节点以添加实现其所没有实现的功能逻辑,这就很棒。视图绘制逻辑树的作用其实完全类似,也是为了尽可能极致地避免重复逻辑出现。游戏开始了,

一般情况下,界面操作逻辑树完全不会发生变化,只需要在原有的基础上进行修修补补就行了,当提出一个新的需求的时候需要发生翻天覆地变化的是视图绘制逻辑树。

上面这块是对于我之前想法的重现,好了,拿个具体的例子来谈谈吧。

我记得在以前的面试中对方曾经问过我这样一个问题,如果对于一个Rest的接口,接口开发人员总是不厌其烦地修修补补,常常直接导致界面地数据操作出现了问题,最后的答案是将逻辑抽离到抽象层,就是这个意思。

那么怎么办呢?提一个构想吧,之前在和别人聊天的时候,听到别人说了他眼中的完全解耦的想法,就是只需要编辑配置文件,就能统合所有的功能类。

就从这里出发,从我当前的视野说起吧,我能不能在我的项目根目录中定义一个文件夹,其中包括了各种功能的配置信息,之前我已经尝试了在代码中自动生成findViewByTag对应代码,这里还希望做的更加疯狂一些,如果idea插件可以对源码进行一定程度上的编译操作,那我感觉,idea并不会愚蠢到这种程度,会不支持文件的创建/删除操作,那么游戏就变得异常好玩了,我能不能根据配置文件中的所指定的配置信息,直接生成源码呢?当然,我的直觉上,gradle...当我没有说

这样一来,每当接口发生变化之后,我只需要在配置文件中输入一个新的json数据的demo,然后通过idea插件直接将其进行转化从而生成对应的类,如果类已经存在,直接复写即可,思路大致如此。

开发日记-20190417 关键词 代码之间耦合度的一刀两断 (思路篇)相关推荐

  1. 开发日记-20190417 关键词 WheelView(视图绘制)

    参考和感谢:https://blog.csdn.net/qq_22393017/article/details/59488906 先说说感想吧,通过这篇博客我对于View绘制的常识有了一定程度的提升, ...

  2. 开发日记-20190417 关键词 JVM互相调用内存GC时不能回收问题

    昨天遇到了一个有点让我怀疑自己眼睛的问题,就是JVM对象存活判定时遇到两个对象互相调用的时候,到底会不会回收,我记得我初步学习JVM的时候就是通过<深入理解java虚拟机>这本书开始的.这 ...

  3. 开发日记-20190513 关键词 汇编语言(六)

    其实,每次当我写一篇开发日记,并且这篇开发日记并没有关键词,或者我并没有和你扯东扯西的情况下... 这意味着我这天偷懒了= = ;AddTwo.asm --两个32位整数相加.386.model fl ...

  4. 开发日记-20190328 关键词 利用eolinker一键快速生成API接口文档

    今天感觉效率真的很低= =各个层面的,apk发布到现场发现出现了问题,所以一个下午都在忙着解决现场出现的问题,领导一直打电话询问进度,午觉也没有睡所以今天预计的很多计划都处于停滞状态,像昨天规划的今天 ...

  5. 开发日记-20190911 关键词 C代码实现shell ftw命令

    代码参考自:Unix环境高级编程(第三版) 顺便得意地说下,网上虽然找不到第三版的电子书,但是我通过模拟器的方式在电脑上显示出的"当当云阅读"的书籍查看效果,其实基本和电子书一致. ...

  6. 开发日记-20190424 关键词 阶段性开发心得和小结

    Android开发学习小结 -图片因为是以前下下来的,所以出处真的记不太清楚了,如果有清楚出处的欢迎指正,我加上去,另外,这只是我的个人学习小结,并不是特地用于分享的,如果观赏有任何的不悦,还请谅解. ...

  7. 开发日记-20190523 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》

    前言 今天其实挺累的,也没有什么特别的感想,因为部门还处于起步阶段,很多流程真的还是相当欠缺,所以一些时候我对于需求的理解其实真的很尴尬,结果就导致了这次做的东西牛头不对马嘴,浪费了大量的时间在完全没 ...

  8. 开发日记-20190516 关键词 MVVM-代码浏览结束

    今天生病了呢=+=.其实今天预计将所有的MVVM都做完的,但是就结果而言,并没有想象中来的简单.嘛嘛嘛,不过基本的想法也已经掌握了,感觉Kotlin真的挺不错的,不过仅仅是作为一门开发语言而言.但是作 ...

  9. 开发日记-20190425 关键词 gradle基础学习 7年之约 启动篇

    以前,面试过一家外企,面试我的技术主管真的很友善,完全是以一种技术交流的态度和我进行交流.说真的,那时候,我一度以为我已经大半只脚踏入了这家企业的大门,他们的hr和我说,我们一个星期内将会给你答复.但 ...

最新文章

  1. TIOBE Programming Community Index
  2. TCL with SNPS file existsfile rename/copy redirect lsearch split
  3. java类的命名规范_浅谈Java中的命名规范
  4. windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...
  5. 三.因子图优化学习---董靖博士在泡泡实验室的公开课学习
  6. python实现第一个web_使用Python的Flask框架来搭建第一个Web应用程序
  7. Mysql for Linux安装配置之——二进制安装
  8. MATLAB调用OpenCV流程(MATLAB R2016a+OpenCV3.1.0+VS2010
  9. 怎样制作动图gif?GIF生成器帮你一键制作gif
  10. 学习总结-《父与子的编程之旅》chapter 17
  11. IDEA编辑器常用快捷键
  12. 常用的SQL注入语句
  13. 计算相关系数进行显著性检验
  14. 用python实现PR对视频处理的基本操作
  15. 恩智浦(飞思卡尔)智能车舵机和电机PID控制
  16. 白嫖华为云后15分钟建站
  17. 【仿微信朋友圈时间,几天前,几分钟前,显示几周前】
  18. WPF textbox禁用输入法
  19. 文字,字体,图像,列表
  20. 精品微信小程序预约挂号小程序+后台管理系统|前后分离VUE

热门文章

  1. c语言prime函数怎么用_n!函数用C语言其实可以这样!
  2. find cp命令的用法
  3. 计算机网络数据分析报告,贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式...
  4. linux系统开机报错,linux开机报错故障
  5. js弹框带传值父窗口给子框_JavaScript实现弹出子窗口并传值给父窗口
  6. 批改网作文提交时分析不出来_小学生作文写作从哪些方面提高呢?
  7. delphi 打包工具_每年帮你省钱20万的砖头打包方式,是你想要的吗?
  8. java 视频预览_java在上传视频时生成预览图
  9. 【深度学习】深度神经网络后处理之全连接CRFs(DenseCRF)
  10. 【2021年度训练联盟热身训练赛第四场】Game Map(python C++)