我有一个包含人物的平面文件"记录"我从服务提供商那里得到的。每个记录实际上都是记录列表。 文件中的每一行代表具有给定类型的记录。 人员记录总是包含类型' 001'和' 099',代表人的开始和结束记录。其他记录将根据“事件”添加到人员条目中。因此,记录是根据给定事件构建的。
实施例
000 # Start of doc.
001 # Person begin.
...
n Records (n > 001 && n < 099)
...
099 # Person end.
001 # Person begin.
...
n Records (n > 001 && n < 099)
...
099 # Person end.
001 # Person begin.
...
n Records (n > 001 && n < 099)
...
099 # Person end.
999 # End of doc.
除了每行的记录类型外,还有其他数据包含在固定位置。
实际开始记录的示例
0010308952872 01000000000000 K1995-03-01
到目前为止,我的方法是为每种类型的记录定义一个.XSD并使用模式绑定类。我的问题是,根据事件的类型,仍然没有关于哪些类型的记录是相关的要求。我会抓一个电话打电话给负责人,但为公共部门工作会使计划成为一个b ****。
有没有人对这种类型的问题陈述最适合哪种软件模式有任何建议?任何经验分享都将非常感激:}
答案 0 :(得分:0)
如果我理解正确,您有不同类型的记录,记录列表可能会随着时间的推移而增长/变化。我的第一个想法是编写一个接口 - 抽象出细节,这样你的大多数应用程序都不会受到底层数据结构更改的影响。
我会尝试通过使用策略模式与Factory模式相结合的方式来实现这一目标。也许创建一个ReadStrategyFactory,它可以根据记录类型返回不同的ReadStrategy实现。
以下是关于战略和工厂模式主题的文章的link - 它可能是相关的。
答案 1 :(得分:0)
如果仅仅是抽象记录对象状态的问题。然后创建一个抽象复合类型来表示任何记录类型。这也可以用作您在复合设计模式中使用的通用接口类型。这使您可以迭代几乎任何类型的数据结构,并将不同类型作为常见复合处理。在Composite Design Pattern上搜索GOF或其他。如果我理解正确的话。 https://sourcemaking.com/design_patterns/composite 这是一个来源。抱歉,原始链接。我在iPhone上。
P.S。我想我应该澄清一下,这假设你在读取平面文件时填充一些数据结构。
答案 2 :(得分:0)
我的建议是尝试使用Factory的策略模式。这个github link是我自己创建的一个简单示例。
从项目中: -
File Reader解决方案能够读取文件结构的不同类型。阅读BookListApp项目中的FileReader_Task.docx以了解此解决方案的问题(用户故事)。
希望这有帮助。
答案 3 :(得分:0)
虽然练习和思考设计模式很棒,但我当然鼓励你去学习它们。我不建议通过考虑哪种设计模式可以解决问题来解决问题。
将它们放在脑海中,但是当您发现代码气味并且需要它们时,请尝试专注于您尝试解决和应用模式的实际问题。否则,您可能最终过度工程或过度复杂化。 YAGNI Refactoring Patterns可能值得一读。
至于你的问题,复合或策略模式可能是合适的,或者可能是不同模式的组合,但如上所述我建议解决问题然后如果你发现代码味道重构使用适当的模式。
这两个网站都有很好的例子,是一个很好的参考:tutorialspoint和sourcemaking