zoukankan      html  css  js  c++  java
  • 【QuotationTool的代码实现】总体代码结构

    项目链接:https://gitee.com/xyjtysk/quotationTools

    QuotationTools自动化脚本的部署和使用QuotationTool能做什么.

    我们介绍了quotationTool能做什么以及如何安装部署,以下章节主要介绍具体的技术实现。

    在开始讲解代码之前,我们来介绍一下整个的架构、思想。

    代码的架构

    架构应具有的特点

    quotationTool自动化脚本其实要实现的就是从Excel读出数据,然后进行处理,加上导航页, 然后输出到Excel里面。

    那么从Excel里面读出的数据以什么样的数据结构进行整合才最方便处理呢?

    数据如何传递到其他模块呢?

    我以后要加需求,能不能快速的添加到里面呢?

    所以我们希望的整体代码应该具有如下特点

    • 松耦合的:

      也就是模块之间最好没有那多的联系,这样我们编写,增加需求也比较容易。

    • 希望一个功能模块一个文件的分开放置,这样显得有条理,而且方便查找

      这份代码我写了两次,第一次大概在17年5~6月份,当时写的代码把很多功能都糅合在一块了,写的时候无必畅快,读的时候无比痛苦。所以我在11月份的时候又把代码重写了一次,几乎推翻了之前的架构,现在代码就清爽多了。

    • 命名尽可能有规律。

      其实如果我们按照一定的命名规律去命名,找起来会方便很多。

    流行的MVC模式就是一种非常好的,可以解决松耦合的问题的设计模式,本项目我参考了MVC设计模式。

    下面我们来看MVC设计模式是什么,理解了MVC设计模式有助于我们理解后面的代码。

    image.png

    MVC模式

    一般人的做法

    一般来说,我们普通人考虑怎么写代码的时候,都是把所有功能都糅合到一块,就如同写作文一下,一气呵成,这样固然爽快,但是带来痛苦也是很明显的。

    • 难以排错。

      经常是发现了bug在那里,但是忘了bug的含义是什么,是在什么样的功能模块下的。

    • 难以添加功能。

      代码不可能一次就写完了,在上线过程中很定有各种各样的额外功能浮现出来,那么怎么加进去了?如果代码都揉在一块,光找的那个部分就很困难

    MVC其实就是一种构建松耦合的代码的好方法。

    MVC怎么来的

    一般一个系统,可以天然的分为“业务逻辑+业务呈现”两个模块,这个时候,很多控制信息糅杂在“业务逻辑”里面。

    那么我们完全可以把控制相关的代码剥离出来,形成一个“控制模块”,这就是解耦合

    那么这个控制模块其实就有一个上帝视角,它可以知道业务模块视图模块在干嘛,而且可以控制它,所有的数据都必须经过它。

    那么

    • 业务模块需要数据的时候,可以向控制模块索取

    • 业务模块每次处理完成以后,都需要把数据返回给控制模块

    • 视图模块需要数据的时候,同样向控制模块索取

    image.png

    那么我们整个代码的数据流向应该是:

    • 双击admin.py入口脚本

    • admin.py调用合适的控制器

    • 控制器根据指令选择合适的业务模型

    • 业务模型进行处理,将数据返回给控制器

    • 控制器调用视图模型,由视图模型进行数据呈现

    下面我们总结一下MVC的角色

    • M(model):主要处理业务逻辑,包括加公司,与MySQL打交道,它就是一个执行者,一个工人

    • V(View):视图模块,主要是用来呈现的,在本项目里面,主要是输出Excel的。

    • C(Controller):控制模块,它有两个功能

      • 控制信息,控制整个流程的走向。

      • 数据的中转站,业务模块和视图模块都会把数据中转到这里面来。

    目录结构

    本小节我们来结合一下具体的代码来看一下

    image.png

    需要注意的是

    • framework存放的是一些固定的代码,可以复用到其他的项目中,比如

      • 调用第三方库读写Excel

      • 对log工具的改进包

      • 对MySQL的操纵包

    • libs是主要的业务逻辑,当然包含控制器、视图、业务模块三个部分
      image.png

    ORG指的是引用第三方库,最后没有用到。

    • tpl:业务呈现的模板,里面的文档存放的是每个sheet对应的格式要求。

    image.png

    先大致了解一下即可,后面还会说到细节

    约定

    我们知道Controller其实是数据的中转站,所以其他Model处理以后的lists都要发到Controller中。

    所以我们约定所有的Model里面

    • assign函数都是用来把controller中的数据赋值到本Model中的。

    • 另外一定还有一个主函数,可以把小函数组装起来。方便Controller的调度。

    使用什么语言

    选择了好的设计模式,那么选择什么样的语言呢。

    所谓人生苦短,我用Python。Python的语言一向非常的简单明了,这也是我选择Python的重要原因。

  • 相关阅读:
    Windows Server 2003 SP2(32位) 中文版 下载地址 光盘整合方法
    用Recycle()方法对Java对象的重要性
    Lotus中千奇百怪的 $$
    Developing a simple application using steps "User Decision" and "Mail"(1) 沧海
    沟通中的情绪管理(演讲稿) 沧海
    人只有在压力之下,才可能成功,没做一件事,都必须成功,不许言败 沧海
    什么是IDOC,以及IDOC的步骤 沧海
    VS2008 Professional Edition CHS中的deffactory.dat读取错误 沧海
    Including custom text in the step "User Decision" 沧海
    SAP Upgrade Strategy 沧海
  • 原文地址:https://www.cnblogs.com/dy2903/p/8465860.html
Copyright © 2011-2022 走看看