.. _intro-overview:

=================
简介
=================

Moose是一个数据处理的自动化框架，旨在提供一套快速、灵活、便捷、幂等式的数据处理方案。它不仅提供了常用的数据处理类和函数，也提供了一套命令行式的接口以处理和维护版本内单一、重复、繁琐的任务。

它从实际工作中遇到的一系列问题产生：

- 工作琐碎重复。工作内容在很大程度上是相似的，这既反映在同批次的工作之间可能只是作用对象不同，也反映在不同批次的工作中很多处理的细节是相似或者一致的；
- 移植性差。脚本在不同的操作系统、开发环境或网络环境中无法正常工作，这导致交接难度变大，需要时间成本去理解、修改或重写代码；
- 复用性差。由于输入输出的格式不统一，高层代码无法被直接使用，底层函数和类也因为总是需要适配参数而作用有限；
- 代码膨胀过快。由于移植性差，因此需要同时维护多个版本的代码，这导致功能上的增加和修改都需要成倍的工作量，代码管理成本上升的同时也增大了出错的几率；
- 对结果没有信心。程序或脚本缺少相关的过程验证，导致得到的结果可信度降低，同时由于数据量大，处理过程中发生的错误也容易被掩盖和忽略；
- 缺乏日志信息。处理过程本身没有被记录，处理前后的数据关联也不明显，错误难以被追溯和定位。


基于上面的认识，我们编写了Moose框架，它包含以下特点：

- 分解过程。行为（Action）被拆分成多个步骤或组件，并提供了默认的实现。当业务变化时，只需对特定的部分进行定制化即可，重写之后的组件也可以被发布和纳入到后续的使用中；
- 适配数据。引入模型（Model）对输入数据进行标准化，避免由于输入的变化引起处理过程的改动；
- 提供底层库。对于在不同平台上会产生不同效果的函数和方法，我们提供了兼容性更强的替代品，这些重新编写的函数和方法消除了平台的差异性，使开发人员关注更高层的业务逻辑；
- 作用对象和过程分离。提出订单（Order）的概念，通过将每次处理所需的参数填写到订单文件中，既避免了不同阶段时参数的重复输入（因为上一阶段的输出文件很可能就是下一阶段的输入），又能通过分析订单文件了解数据的流转节点；
- 命令行工具。提供了丰富的命令行工具简化创建相关文件的操作，交互方式更一致，即使对实现不了解也可以完成相关处理；
.. - 便捷的过程和结果验证。Moose提供了测试和统计模块，只需要少量的编码即可完成单元测试和显示统计结果，使得过程和结果更加可控。

如果Moose能解决你的问题或者你对它感兴趣，赶紧了解 :doc:`install` 来安装吧。
