我有一个应用程序,它可以创建一个MS Word文档并运行它
运行外部文档是表示层还是业务逻辑层的一部分?
一方面,它似乎应该是表示层的一部分,因为它最终会导致某些东西被"呈现"给用户(尽管是在外部应用程序中)。另一方面,它似乎更像是一个业务逻辑层的问题,因为表示层可能只想关心当前应用程序的UI,而且归根结底,它真正做的只是运行一个外部流程——可以用于多个外部流程,而这些流程并不都具有"表示"方面。
此外,我不确定SO是否是这个问题的正确答案。我查过了https://softwareengineering.stackexchange.com/但这些标签上只有少数追随者。
这取决于您所说的"表示层的一部分"是什么意思。如果你指的是实际的实现,那么它绝对不是。是的,结果是一个打开的Word文档,但这与应用程序的表示层无关。
- 实际的实现应该转到基础结构层,在那里应该有处理数据库、文件和第三方应用程序的所有代码
- 您可能有不同的文档生成逻辑实现。例如,对于控制台应用程序,它应该只将文件写入文件夹,对于web应用程序,将文件写入响应,然后由用户下载,等等
- 由于实际的逻辑是特定于应用程序的,它应该在应用程序层上被INJECTED,如果你没有它,那么这里的表示层也应该可以
- 我想您还希望确保始终为特定的业务案例生成文档。然后,您应该将注入的文档生成服务传递给您的业务层。在这种情况下,如果您想将业务逻辑转移到另一个应用程序,请不要忘记在需要时实现新的文档生成逻辑
所以你的代码应该如下:
public class BusinessLayerService
{
private IDocumentGenerator _documentGenerator;
public BusinessLayerService(IDocumentGenerator documentGenerator)
{
_documentGenerator = documentGenerator;
}
public void DoBusinessCase1()
{
// Do work here
_documentGenerator.GenerateDocument();
}
}
如果您使用任何IoC容器,只需在您的应用程序启动程序上注册所需的实现(用于web、windows、mobil或控制台应用程序)。
希望它能有所帮助!