代码之家  ›  专栏  ›  技术社区  ›  BoxOfNotGoodery

设计处理多种文件格式、解析、验证和持久性的文件处理

  •  5
  • BoxOfNotGoodery  · 技术社区  · 16 年前

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

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

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

    XML指定诸如文件布局(分隔或固定宽度)和特定于字段的项(长度、数据类型(数字、字母、字母数字)以及存储字段的数据库列等内容。

             <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),解析/验证并将这些信息存储到数据库中。你会怎么做?

    3 回复  |  直到 9 年前
        1
  •  0
  •   James Black    16 年前

    你可能想开始写博客,如果你在LinkedIn上,你可以将讨论指向你的博客,或者在LinkedIn上开始讨论,因为那里的一些讨论会持续一段时间。

        2
  •  1
  •   Paul Nathan    16 年前

    好吧,一个简单的设计就像…

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

    读者负责文件验证(数据是否存在?)分析时,验证部分负责处理任何业务逻辑,而db…是db。

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

    您可以通过使用验证器方法和数据成员设计一个GR2V超类来实现多态性,然后每个读卡器从GR2V中划分出子类,并用自己的readParseFile方法填充数据。这将引入比严格的过程方法更多的耦合。我会按照程序进行,因为数据是在概念设计中按程序处理的。

        3
  •  0
  •   djna    16 年前

    所以,对于细节来说是很好的,似乎真正的讨论在这里并不容易完成。评论太小,不能交换意见。我想去别的地方。

    虽然这样的讨论应该是技术不可知的,但我怀疑你可能会发现Java和.NET阵营不会遇到太多。我会看看 The Server Side 但我做Java,因此寻找Java的东西。