我正在启动将使用REST API的3层架构的项目。
我想将每一层拆分成单独的模块,所以我绝对需要至少3个模块:
在它们之间建立依赖关系的最佳方法是什么:
1)
2)
3)
第三种方法似乎与依赖性倒置原则最兼容,但需要更多模块。 你如何命名这两个额外的模块?
答案 0 :(得分:1)
我会将您的BLL代码保存在名为Services的项目中,将您的DAL代码保存在名为Repositories的项目中,以及将您的接口和业务对象(或实体)保存在名为Core的项目中。
您的REST项目应仅引用Core(和服务以解决依赖关系)。您只对接口进行编程。您也可以在此处使用DI原则。
您的服务和存储库应该只依赖于Core。这些具体实现只需要实现Core接口并对Core实体起作用。
这种方法不仅允许您使用DI,而且使测试更容易。此外,您的应用程序都不会紧密耦合到您的具体外部依赖项(即特定的数据库实现)。这使您的整个应用程序更加灵活和可扩展。
附注:我经常包含另一个名为Infrastructure的项目来处理日志记录等横切问题。这些具体类实现了Core接口,就像我的存储库和服务一样,可以使用接口调用。
答案 1 :(得分:0)
你可以为所有具有所有接口和域模型的人提供通用的第四个模块,但这不会阻止REST直接调用DAL(它至少会编译)。
我通常这样做或者直接选择第一个选项,我并不担心,因为我指望我的其他同谋开发人员有一些建筑分离感。我过去使用'架构'方面来防止层跳跃,但你必须在构建/ IDE中包含方面编译器支持才能做到这一点。