数据源模式 - 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();
另一方面,我建议在以下情况下使用存储库模式:
- 您想利用单元测试。
- 您从多个位置访问数据源并且想要简化复杂性。
- 您想要一个集中的地方来处理缓存。
- 你想要明确的关注点分离。
- 您想应用领域模型来简化复杂的业务逻辑。
在我的公司,我们使用基于 "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();
另一方面,我建议在以下情况下使用存储库模式:
- 您想利用单元测试。
- 您从多个位置访问数据源并且想要简化复杂性。
- 您想要一个集中的地方来处理缓存。
- 你想要明确的关注点分离。
- 您想应用领域模型来简化复杂的业务逻辑。