数据源模式 - table 的级别方法放在哪里?

Data Source Patterns - Where's to put table's level methods?

在我的公司,我们使用基于 "Active Record Pattern" 的模型,模型方法总是与数据库中单个记录的操作相关,例如:

Class User {
    int id;
    string Name;

    public boolean Find (id); // SQL / ORM to return the object based on the user's Id;
    public boolean Save (); // SQL / ORM to save / update a user
    public boolean Delete (); // SQL / ORM to delete a user.
}

// Create the user "John"
Set objUser = new User ();
objUser.Name = "John";
objUser.Save ();

我的问题是,关于数据库实体 "User",我们有 table 级别的方法而不是记录,例如方法 "getAllActiveUsers",returns me 所有活跃用户的查询对象。 这种情况最终会出现在自己的 ActiveRecord 模型中,我认为这没有意义..你能帮我理解什么是处理这种情况最明智/最优雅的吗? 我阅读了一些关于网关和存储库模式的内容,可能对此有用,但想知道是否有人遇到同样的问题,你是如何解决的..

谢谢!!

我不是 Active Record 模式的忠实粉丝,但我认为使用它的一致方法是将 getAllActiveUsers 添加到 User class:

User.getAllActiveUsers();

另一方面,我建议在以下情况下使用存储库模式

  • 您想利用单元测试。
  • 您从多个位置访问数据源并且想要简化复杂性。
  • 您想要一个集中的地方来处理缓存。
  • 你想要明确的关注点分离。
  • 您想应用领域模型来简化复杂的业务逻辑。