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

时间:2014-10-20 14:41:30

标签: architecture business-logic-layer external-process presentation-layer

我有一个创建MS Word文档并运行它的应用程序。我试图找出将该代码放入哪个图层。

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

一方面,它似乎应该是表示层的一部分,因为它最终会导致某些内容被呈现出来#34;给用户(尽管在外部应用程序中)。另一方面,它似乎更像是一个业务逻辑层关注点,因为表示层可能只想关注当前应用程序的UI,并且因为当它归结为它时所有它真的在做正在运行一个外部流程 - 可以用于多个外部流程的东西,这些流程都不具备"演示"他们的方面。

另外,我不确定SO是否适合这个问题。我检查了https://softwareengineering.stackexchange.com/,但这些标签上只有少数粉丝。

1 个答案:

答案 0 :(得分:0)

这取决于“表示层的一部分”的含义。如果你的意思是实际的实现,那肯定不是。是的,结果是打开的Word文档,但这与应用程序的表示层无关。

  1. 实际的实现应该转到Infrastructure层,在那里应该使用所有代码来处理数据库,文件和第三方应用程序。
  2. 您可能有不同的文档生成逻辑实现。例如,对于控制台应用程序,它应该只将文件写入文件夹,Web应用程序将文件写入响应,然后由用户下载等。
  3. 由于实际逻辑是应用程序特定的,它应该在应用程序层上注入,如果你没有它,表示层也应该在这里。
  4. 我假设您还要确保始终为特定业务案例生成文档。然后,您应该将注入的文档生成服务传递到业务层。在这种情况下,如果您想将业务逻辑移动到其他应用程序,您将不会忘记在需要时实现新的文档生成逻辑。
  5. 所以你的代码应该如下:

    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应用程序)。

    希望它有所帮助!