我正在使用flask和SQLAlchemy,所以让我们说例如我有一个类User:
class User(UserMixin, Base):
__tablename__ = 'user'
id = Column(Integer, nullable=False, autoincrement=True, primary_key=True)
email = Column(String(100), nullable=False, unique=True)
password = Column(String(100))
name = Column(String(100))
现在在我的视图中,每当我通过id或名称进行查询以获取用户时,我都会进行查询。所以我想创建一个名为userService的类并将所有查询放入其中。所以我可以:
class UserService():
def getUserByName(self, name):
return User.query.filter(User.name == name).first()
def getUserById(self, id):
return User.query.get(id)
def getUserByEmail(self, email):
return User.query.filter(User.email == email).first()
现在在我的视图中,我可以在每次需要用户时调用UserService类。我使用应用程序工厂,所以我的问题是:在我的create_app函数中实例化UserService对象然后在我的views.py文件中导入它是否更有效率,或在views.py文件中的每个路由中实例化一个新的UserService对象?
看来你只需要UserService
类来命名空间,这样你就不需要创建实例了。您可以将方法更改为staticmethods或创建包含这些函数的模块:
# userservice.py
class UserService():
@staticmethod
def getUserByName(name):
return User.query.filter(User.name == name).first()
# userservice.py
def getUserByName(name):
return User.query.filter(User.name == name).first()
...
我更喜欢第二种方法,它更干净,更pythonic这样做:
# views.py
import userservice
user = userservice.getUserByName(name)
# first approach
from userservice import UserService
user = UserService.getUserByName(name)