作为初学者,我已经提出了一些想法,但想向社群询问实施以下计划的最佳方式:
它解码了8种不同类型的数据文件。它们都不同,但大多数都相似(包含很多类似的字段)。此外,还有3代系统可以生成这些文件。每个都略有不同,但生成相同类型的文件。
我需要创建一个可以读取其中任何一个的可视化应用程序,在绘制图形之前在表格中绘制数据(目前使用datagridview通过datatable)。
还有一点,但我的问题是关于基本结构。
我希望能够更好地了解如何更好地利用面向对象技术。
我正在使用c#(除非有更好的建议)主要是由于我缺乏经验和快速的开发时间。
我目前正在使用一个名为“log”的类,它知道打开的文件是什么生成/日志类型。它控制读取和导出到数据表。然后,表单可以为其提供路径,等待它处理文件并请求显示数据表。
有任何明显的改进吗?
答案 0 :(得分:1)
正如您已经意识到在这里创建一个非常优雅的OOP应用程序有很大的潜力。
您的基本需求 - 我可以从您分享的信息中看到 - 是:
1)识别文件类型的模块
2)一个可以读取文件并将数据加载到一个公共结构中的模块(它是常见的结构吗?)这个由处理程序组成
3)可以显示数据的模块
对于第一个,我会推荐两种模式:
1a)工厂模式:文件被传递到一个公共工厂并被解析到它可以决定处理程序
2a)责任链:文件被传递给每个处理程序,该处理程序知道它是否可以支持该文件。如果它不能传递到下一个。最后,如果最后一个处理程序无法处理它,则一个处理程序将对其进行处理或发生错误。
对于第二个,我建议设计一个通用接口,每个处理程序实现常见任务,如加载,解析......如果可视化不同并且特定于处理程序,那么你也可以拥有这些方法。
如果不了解有关数据结构的更多信息,我无法对可视化部分发表评论。
希望这有帮助。
<强>更新强>
这是工厂的 - 一个非常粗略的伪代码:
Factory f = new Factory();
ILogParser parser = f.GetParser(fileName); // pass the file name so that factory inspects the content and returns appropriate handler
CommonDataStructure data = parser.Parse(fileName); // parse the file and return CommonDataStructure.
Visualiser v = new Visualiser(form1); // perhaps you want to pass the refernce of your form
v.Visualise(data); // draw pretty stuff now!
答案 1 :(得分:0)
好的,首先 - 为每个文件结构类型创建一个类,作为解析器。根据需要使用继承来组合常用功能。
每个文件解析器都应该有一个方法来识别它是否可以解析文件,因此您可以获取文件名,然后询问认为它可以处理数据的解析器。
.NET 4.0和可扩展性框架可以允许在没有已知确定的选择图的情况下动态集成解析器。
其余的主要取决于数据的相似程度等。
答案 2 :(得分:0)
好吧,所以OOP的基本概念是将Classes等视为对象,直接来自偏移,面向对象的编程可能是一个棘手的主题,但是你获得的练习越多越容易找到它使用OOP实现程序。
看看这里:http://msdn.microsoft.com/en-us/beginner/bb308750.aspx
所以你可以拥有一个Decoder类和接口,就像这样。
interface IDecoder
{
void DecodeTypeA(param1, 2, 3 etc);
void DecodeTypeB(param1, 2, 3 etc);
}
class FileDecoder : IDecoder
{
void DecodeTypeA(param1, 2, 3 etc)
{
// Some Code Here
}
void DecodeTypeB(param1, 2, 3 etc)
{
// Some Code Here
}
}