【问题标题】:Designing file processing that handles many file formats, parsing, validation, and persistence设计处理多种文件格式、解析、验证和持久性的文件处理
【发布时间】:2010-12-06 00:21:17
【问题描述】:

如果您必须设计一个文件处理组件/系统,它可以采用多种文件格式(包括专有格式,如 Excel),解析/验证这些信息并将其存储到数据库中。您会怎么做是吗?

注意:95% 的情况下,1 行输入数据将等于数据库中的一条记录,但并非总是如此。

目前我正在使用一些我设计的自定义软件来解析/验证/将客户数据存储到我们的数据库中。系统通过文件系统中的位置(从 ftp 下载)识别文件,然后加载 XML“定义”文件。 (根据输入文件的放置位置加载正确的 XML)。

XML 指定文件布局(定界或固定宽度)和字段特定项(长度、数据类型(数字、字母、字母数字)以及将字段存储到哪个 DB 列)等内容。

         <delimiter><![CDATA[ ]]></delimiter>
   <numberOfItems>12</numberOfItems>
   <dataItems>
    <item>
     <name>Member ID</name>
     <type>any</type>
     <minLength>0</minLength>
     <maxLength>0</maxLength>
     <validate>false</validate>
     <customValidation/>
     <dbColumn>MembershipID</dbColumn>
    </item>

由于这种设计,输入文件必须是文本(固定宽度或分隔),并且从输入文件数据字段到 DB 列具有 1 对 1 的关系。

我想扩展我们的文件处理系统的功能以接受 Excel 或其他文件格式。

至少有六种方法我可以继续,但我现在被困住了,因为我没有人可以真正从这些想法中汲取灵感。

再说一遍:如果您必须设计一个文件处理组件,它可以采用多种文件格式(包括 Excel 等专有格式),解析/验证这些信息并将其存储到数据库中。您会怎么做是吗?

【问题讨论】:

  • Serverfault.com 是一个可以与您讨论系统设计的网站
  • 没有。 Serverfault.com 仅提供与服务器相关的问题。
  • @Andrejs- Servefault 是为系统管理员和 IT 专业人员设计的,所以这取决于他对系统设计的问题

标签: system file-processing


【解决方案1】:

嗯,简单的设计类似于......

+-----------+
| reader1   |
|           |---
+-----------+   \---
                    \---   +----------------+               +-------------+
                        \--|  validation    |               |  DB         |
                       /---|                |---------------|             |
+-----------+    /-----    +----------------+               +-------------+
| reader2   |----
|           |
+-----------+

Readers 负责文件验证(数据是否存在?)和解析,Validation 部分负责任何业务逻辑,而 DB...是一个 DB。

因此,您必须设计的部分内容是 Generic ReaderToValidator 数据容器。这更像是一种业务逻辑类型的容器。我怀疑无论输入格式如何,您都想要相同类型的数据,所以 G.R.2.V.不会太难。

您可以通过使用 Validator 方法和数据成员设计 GR2V 超类来实现这一点,然后每个读取器从 GR2V 子类化并使用自己的 ReadParseFile 方法填充数据。与采用严格的程序方法相比,这将引入更多的耦合。我会为此进行程序化,因为数据是在概念设计中程序化处理的。

【讨论】:

    【解决方案2】:

    您可能想创建一个博客,然后如果您在 LinkedIn 之类的网站上,您可以将讨论指向您的博客,或者在 LinkedIn 上开始讨论,因为那里的一些讨论会持续一段时间。

    【讨论】:

      【解决方案3】:

      SO 对细节有好处,看来真正的讨论在这里并不容易。评论太小,无法交换意见。我倾向于去其他地方。

      尽管此类讨论应该与技术无关,但我怀疑您可能会发现 Java 和 .Net 阵营并没有太多的交集。我会查看The Server Side,但我使用 Java,因此会寻找 Java 的东西。

      【讨论】:

        猜你喜欢
        • 2017-05-04
        • 2014-07-12
        • 2017-04-09
        • 1970-01-01
        • 2017-06-18
        • 2015-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多