Architecture 运行外部文档是表示层的一部分吗?

Architecture 运行外部文档是表示层的一部分吗?,architecture,business-logic-layer,external-process,presentation-layer,Architecture,Business Logic Layer,External Process,Presentation Layer,我有一个创建MS Word文档并运行它的应用程序。我想弄清楚该把代码放在哪一层 运行外部文档是表示层的一部分还是业务逻辑层的一部分 一方面,它似乎应该是表示层的一部分,因为它最终会向用户呈现一些东西,尽管是在外部应用程序中。另一方面,它看起来更像是一个业务逻辑层,因为表示层可能只想关注当前应用程序的UI,因为它真正做的就是运行一个外部进程——可以用于多个外部进程,而这些外部进程并不都具有表示方面 另外,我不确定这是否是这个问题的正确位置。我检查了一下,但是这些标签上只有少数追随者。这取决于您所说

我有一个创建MS Word文档并运行它的应用程序。我想弄清楚该把代码放在哪一层

运行外部文档是表示层的一部分还是业务逻辑层的一部分

一方面,它似乎应该是表示层的一部分,因为它最终会向用户呈现一些东西,尽管是在外部应用程序中。另一方面,它看起来更像是一个业务逻辑层,因为表示层可能只想关注当前应用程序的UI,因为它真正做的就是运行一个外部进程——可以用于多个外部进程,而这些外部进程并不都具有表示方面


另外,我不确定这是否是这个问题的正确位置。我检查了一下,但是这些标签上只有少数追随者。

这取决于您所说的表示层的一部分是什么意思。如果你指的是实际的实现,那么肯定不是。是的,结果是一个打开的Word文档,但这与应用程序的表示层无关

实际的实现应该转到基础架构层,在那里所有的代码都应该用来处理数据库、文件和第三方应用程序。 您可能有不同的文档生成逻辑实现。例如,对于控制台应用程序,它应该只将文件写入文件夹;对于web应用程序,它将文件写入响应,以便用户下载,等等。 由于实际逻辑是特定于应用程序的,所以应该将其注入到应用程序层,如果没有,则表示层在这里也应该可以。 我假设您还希望确保始终为特定的业务案例生成文档。然后,您应该将注入的文档生成服务传递给您的业务层。在这种情况下,如果您想将业务逻辑移动到不同的应用程序,您不会忘记在需要时实现新的文档生成逻辑。 因此,您的代码应该如下所示:

public class BusinessLayerService
{
    private IDocumentGenerator _documentGenerator;

    public BusinessLayerService(IDocumentGenerator documentGenerator)
    {
        _documentGenerator = documentGenerator;
    }

    public void DoBusinessCase1()
    {
        // Do work here
        _documentGenerator.GenerateDocument();
    }
}
如果您使用任何IoC容器,只需在应用程序启动时注册web、windows、mobil或console应用程序所需的实现


希望有帮助

IMHO它应该是您的表示层的一部分,因为在其中翻译的数据只是以MS Word文档的形式出现。@rory.ap我的答案有用吗?