如何在3层体系结构中组织依赖关系

时间:2014-11-12 19:05:08

标签: java n-tier-architecture 3-tier

我正在启动将使用REST API的3层架构的项目。

我想将每一层拆分成单独的模块,所以我绝对需要至少3个模块:

  • REST
  • BLL
  • DAL

在它们之间建立依赖关系的最佳方法是什么:

1)

  • REST取决于BLL
  • BLL取决于DAL
  • DAL不依赖

2)

  • REST完全不依赖
  • BLL依赖于REST
  • DAL取决于BLL

3)

  • REST依赖于REST-BLL-Interfaces
  • REST-BLL-Interfaces完全不依赖
  • BLL依赖于REST-BLL接口和DAL-BLL接口
  • DAL-BLL-Interfaces什么都不依赖
  • DAL取决于DAL-BLL-Interfaces

第三种方法似乎与依赖性倒置原则最兼容,但需要更多模块。 你如何命名这两个额外的模块?

2 个答案:

答案 0 :(得分:1)

我会将您的BLL代码保存在名为Services的项目中,将您的DAL代码保存在名为Repositories的项目中,以及将您的接口和业务对象(或实体)保存在名为Core的项目中。

您的REST项目应仅引用Core(和服务以解决依赖关系)。您只对接口进行编程。您也可以在此处使用DI原则。

您的服务和存储库应该只依赖于Core。这些具体实现只需要实现Core接口并对Core实体起作用。

这种方法不仅允许您使用DI,而且使测试更容易。此外,您的应用程序都不会紧密耦合到您的具体外部依赖项(即特定的数据库实现)。这使您的整个应用程序更加灵活和可扩展。

附注:我经常包含另一个名为Infrastructure的项目来处理日志记录等横切问题。这些具体类实现了Core接口,就像我的存储库和服务一样,可以使用接口调用。

答案 1 :(得分:0)

你可以为所有具有所有接口和域模型的人提供通用的第四个模块,但这不会阻止REST直接调用DAL(它至少会编译)。

我通常这样做或者直接选择第一个选项,我并不担心,因为我指望我的其他同谋开发人员有一些建筑分离感。我过去使用'架构'方面来防止层跳跃,但你必须在构建/ IDE中包含方面编译器支持才能做到这一点。