我是OOP设计概念的新手,并且想知道以下用例的正确方法是什么(我正在使用JavaScript和Mongo进行开发,但我认为问题是一个普遍的问题):
我将User
作为集合/表,并用一个类包装了与该用户的交互。我的想法是从主程序中抽象出数据库交互。
在某些情况下,我需要检查数据库中是否已存在user
:
如果有,请使用该用户的信息。
如果没有,请继续处理流程并将用户重定向到某个页面
选项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
}
答案 0 :(得分:0)
此解决方案将破坏 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
}