我正在Laravel顶部构建应用程序。在我的Domain
层中,有服务。其中之一需要发送电子邮件。 Laravel为此提供了Illuminate\Mail
软件包。
但是Mailer
合同取决于\Illuminate\Mail\PendingMail
类。
https://github.com/laravel/framework/blob/5.7/src/Illuminate/Contracts/Mail/Mailer.php
这是否意味着我需要为Domain
层编写自己的接口(端口),以使应用程序与框架完全脱钩?
答案 0 :(得分:0)
说实话,我不确定您要问什么。但是我会尽力回答。
如果直接在代码中使用(任何)框架功能,则显然会将应用程序耦合到框架。这就是框架的重点。它提供了许多功能,这些功能通常在不同类型的应用程序中使用。可以将其视为应用的基础。通常可以通过接口使这些功能可用,以便在必要时可以将实现换出。交换实现并不会减少应用程序与框架的耦合。它只允许您使用另一种实现。该界面仍将是一个框架。
因此,防止(大量)与框架耦合的唯一方法是编写自己的接口,以抽象化所有框架功能。然后,您可以拥有实现这些新接口的代理类,而除了将请求代理到框架的适当功能之外,什么都不做,从而允许您将来为其他框架编写其他代理类。
如果您问我,这听起来是个坏主意。因为最后,您将基于自己的接口构建自己的框架。因此,您正在使用其他自定义代码,该代码不增加任何其他功能,但存在增加的错误和错误风险。