5

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

4

3 回答 3

1

嗯,一个简单的设计就像......

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

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

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

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

于 2009-10-12T15:37:47.060 回答
0

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

于 2009-10-12T14:50:23.083 回答
0

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

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

于 2009-10-12T14:51:17.747 回答