【问题标题】:Data Source Patterns - Where's to put table's level methods?数据源模式 - 在哪里放置表级方法?
【发布时间】:2015-07-23 15:19:37
【问题描述】:

在我的公司,我们使用基于“活动记录模式”的模型,模型方法总是与数据库中单个记录的操作相关,例如:

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 ();

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

谢谢!!

【问题讨论】:

    标签: java c# php design-patterns


    【解决方案1】:

    我不是 Active Record 模式的忠实拥护者,但我认为一致的使用方法是将 getAllActiveUsers 添加到 User 类中:

    User.getAllActiveUsers();
    

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

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

    【讨论】:

      猜你喜欢
      • 2015-05-21
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 2017-04-12
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      相关资源
      最近更新 更多