Class 基于给定数据的行为
Class behavior based on given data
我正在从控制器接收 IFormFile。
我接下来要做的是对其进行处理并获取其内容。我希望获得 .docx、.txt 或 .pdf 文件,并且我想要一个 class 来根据给定的扩展名处理这些文件中的任何一个。我创建并制作了我的 class 来做到这一点:
{
public static class DocumentProcessor // Should it be like this?
{
public static string GetContent(IFormFile file)
{
var result = new StringBuilder();
switch (Path.GetExtension(file.FileName))
{
case ".txt":
{
using(var reader = new StreamReader(file.OpenReadStream()))
{
while (reader.Peek() >= 0)
result.AppendLine(reader.ReadLine());
}
break;
}
}
return result.ToString();
}
}
}
无论如何,我觉得这是一个非常糟糕的解决方案,因为它是静态的。我可以使用策略模式,但我如何定义必须使用的策略上下文?
我是否应该创建另一个 class
returns 依赖于 IFormFile 对象扩展的 Strategy 对象。但我觉得这也是一个糟糕的解决方案
我想知道解决这个问题的最佳方法是什么
创建新界面
interface IDocumentParser {
string GetContent(IFormFile file);
}
每个解析器扩展实现一次该接口,例如:
class TextFileParser : IDocumentParser {
public string GetContent(IFormFile file) {
//your implementation code here
}
}
然后实现一个工厂:
class ParserFactory {
public static IDocumentParser GetParserForFilename(string filename) {
/*
This is the simple way. A more complex yet elegant way would be for all parsers to include a property exposing the filetypes it supports, and they are loaded through reflection or dependency injection.
*/
switch (Path.GetExtension(fileName))
{
case ".txt":
{
return new TextFileParser();
}
// add additional parsers here
}
return null;
}
}
并使用:
IDocumentParser parser = ParserFactory.GetParserForFilename(file.FileName);
string content = parser.GetContent(file);
这称为“控制反转”。
我正在从控制器接收 IFormFile。 我接下来要做的是对其进行处理并获取其内容。我希望获得 .docx、.txt 或 .pdf 文件,并且我想要一个 class 来根据给定的扩展名处理这些文件中的任何一个。我创建并制作了我的 class 来做到这一点:
{
public static class DocumentProcessor // Should it be like this?
{
public static string GetContent(IFormFile file)
{
var result = new StringBuilder();
switch (Path.GetExtension(file.FileName))
{
case ".txt":
{
using(var reader = new StreamReader(file.OpenReadStream()))
{
while (reader.Peek() >= 0)
result.AppendLine(reader.ReadLine());
}
break;
}
}
return result.ToString();
}
}
}
无论如何,我觉得这是一个非常糟糕的解决方案,因为它是静态的。我可以使用策略模式,但我如何定义必须使用的策略上下文? 我是否应该创建另一个 class returns 依赖于 IFormFile 对象扩展的 Strategy 对象。但我觉得这也是一个糟糕的解决方案 我想知道解决这个问题的最佳方法是什么
创建新界面
interface IDocumentParser {
string GetContent(IFormFile file);
}
每个解析器扩展实现一次该接口,例如:
class TextFileParser : IDocumentParser {
public string GetContent(IFormFile file) {
//your implementation code here
}
}
然后实现一个工厂:
class ParserFactory {
public static IDocumentParser GetParserForFilename(string filename) {
/*
This is the simple way. A more complex yet elegant way would be for all parsers to include a property exposing the filetypes it supports, and they are loaded through reflection or dependency injection.
*/
switch (Path.GetExtension(fileName))
{
case ".txt":
{
return new TextFileParser();
}
// add additional parsers here
}
return null;
}
}
并使用:
IDocumentParser parser = ParserFactory.GetParserForFilename(file.FileName);
string content = parser.GetContent(file);
这称为“控制反转”。