【问题标题】:Laravel 5 GenericDAO like Java + HibernateLaravel 5 GenericDAO 类似 Java + Hibernate
【发布时间】:2017-11-15 22:41:01
【问题描述】:

正如我在标题中提到的,我想在 Laravel 5.4 中实现与 GenericDAO 类似或最佳的方法。

我使用 Java 和 Hibernate 已经有一段时间了,我曾经声明一个具有通用实现的通用接口、扩展通用接口的特定接口以及这些接口的特定实现。这样,CRUD 的代码保持清晰,如果我需要更改 CRUD 方法,我只需修改通用代码。另外,如果我需要在该方法中检查或做一些其他事情,我可以更改特定方法。

在 Java 中我使用了这样的东西:

public interface GenericDAO<T, ID> extends Serializable {
    ...
}

public class GenericDAOImplHibernate<T, ID> extends Serializable implements GenericDAO<T, ID> {
    ...
}

public interface UserDAO extends GenericDAO<User, Integer> {
    ...
}

public class UserDAOImplHibernate extends GenericDAOImplHibernate<User, Integer> implements UserDAO {
    ...
}

等等……我不记得是不是完全一样,但确实很相似。我希望你能帮助我为未来的项目设计这种结构。

感谢您的宝贵时间。

最好的问候, 达格利米乌。

【问题讨论】:

    标签: php interface laravel-5.4 laravel-eloquent


    【解决方案1】:

    第一件事就是第一。我不知道你是否知道,但 PHP 缺乏泛型。有一些模拟泛型的解决方法,但它变得棘手,我宁愿不讨论这个话题,在谈到 PHP 时。话虽如此,Laravel 附带了一个名为 Eloquent 的 ORM,基本模型为 Model(访问 here 了解更多信息),用于您需要使用的任何“模型”。通常,模型与migration 配对,以防您需要将数据存储在数据库中。

    您可以获得开箱即用的好东西,就像所有 CRUD 操作一样:$object-&gt;save()$object-&gt;update(['attr'=&gt;'value']) 等。因此,您几乎不需要自己实现这些东西。如果您想覆盖任何实现,您可以扩展Model 并根据您的需要进行定制。

    同样,由于 Laravel 没有任何通用的幻想,模型关系及其实现往往是相当线性的。但是,这并不妨碍您执行常规接口和 SOLID、多对多、一对一等操作。

    如果您是 Laravel 新手,我建议您阅读文档并观看 Laracasts

    我希望这会有所帮助。

    【讨论】:

    • 感谢您的回答。是的,我是 Laravel 的新手,但我已经阅读了文档,并且正在使用 Laravel 进行一个项目。我现在尝试的是为 eloquent 或类似的东西创建一个通用资源控制器,然后其余的将从那个扩展并只修改需要特定方法内容的内容。在我们使用不同的项目结构来找出我们能做什么或不能做什么之前,我更愿意问这个问题。再次感谢。
    • 别担心,很高兴我的回答对您有所帮助!一个问题……是什么让你从众所周知的 Spring+Hibernate 环境切换到 Laravel?当然,如果你不介意我问...
    • 我是 Java 的忠实拥护者,但在与硬件消耗相关的较新 Java 版本(1.7、1.8...)中,我并没有看到良好的进展,即使是 Web 也是如此。当我加入我正在工作的公司时,他们有一个很棒的项目(但可能是由 3 只猴子开发的,因为人类不可能开发出这么糟糕的项目)并且他们使用 Symfony 作为框架。最近,我不得不为特定客户开始开发,我一直在寻找比 Symfony 更好的东西(它本身就很棒),我发现了基于 Symfony 但更简单的 Laravel :)
    • 不错!在我看来,Laravel 绝对更容易。虽然没有Java那么花哨。你对 Play Framework 有什么看法?用过吗?
    • 不,我没用过。在 Twitter 上加我 (@Daglimioux),以便我们进一步讨论这个问题和任何其他问题:)
    猜你喜欢
    • 2015-10-09
    • 1970-01-01
    • 2015-08-06
    • 2019-08-05
    • 2014-04-16
    • 1970-01-01
    • 2016-04-19
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多