0

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

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

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

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

4

1 回答 1

0

这取决于您所说的“表示层的一部分”是什么意思。如果您的意思是实际实施,那么绝对不是。是的,结果是打开的 Word 文档,但这与应用程序的表示层无关。

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

因此,您的代码应如下所示:

public class BusinessLayerService
{
    private IDocumentGenerator _documentGenerator;

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

    public void DoBusinessCase1()
    {
        // Do work here
        _documentGenerator.GenerateDocument();
    }
}

如果您使用任何 IoC 容器,只需在应用程序启动时注册所需的实现(用于 Web、Windows、移动或控制台应用程序)。

希望能帮助到你!

于 2014-10-21T12:23:52.627 回答