我应该创建类还是静态方法的对象来检查是否存在数据库条目?

时间:2019-01-24 18:37:24

标签: oop

我是OOP设计概念的新手,并且想知道以下用例的正确方法是什么(我正在使用JavaScript和Mongo进行开发,但我认为问题是一个普遍的问题):

我将User作为集合/表,并用一个类包装了与该用户的交互。我的想法是从主程序中抽象出数据库交互。 在某些情况下,我需要检查数据库中是否已存在user

如果有,请使用该用户的信息。
如果没有,请继续处理流程并将用户重定向到某个页面

  • 选项1:创建User类的实例只是为了检查它是否存在有意义?
  • 选项2:在类中具有类似于静态方法的功能来执行此操作,但似乎也不正确,因为如果用户存在,我想使用它的信息,则需要再次创建它。

选项1:

let user = new User(name);

if (user.isExist()){
   //do something with user properties
} else {
   //redirect to /someRoute
}

选项2:

if (User.isExist(name)){
  let user = new User(name);
  //do something with user properties
} else {
   //redirect to /someRoute
}

1 个答案:

答案 0 :(得分:0)

对选项1和选项2的反馈

此解决方案将破坏 Single-Responsibility Open-Closed 原理。

在对类进行建模时,您必须考虑User的逻辑以及如何处理持久性事务。例如,从Mongo切换到SQL时,需要更改持久性事务。

因此,让我们将逻辑分为单独的类。

添加新班级!

我可以想到处理持久性事务的类UserTransaction

class UserTransaction {
    constructor(/*...*/) {/*...*/}

    static existsWithTheName(name) {
        // ...
    }
}

比您的代码看起来像:

if (UserTransaction.existsWithTheName(name)){
  let user = new User(name);
} else {
   //redirect to /someRoute
}