缩写CRUD(创建、读取、更新、删除)在面向对象编程中很常见。作为OOP的新手,我想知道这个功能的上下文。当使用CRUD方法构建类时,这些方法应该是创建、读取、更新、删除对象属性,还是应该对数据库数据执行这些操作,或者进行某种组合?
解释CRUD:
- create:这部分指的是构造函数和工厂方法,它们"创建"新的数据对象供您使用,或将新记录添加到数据库中
- 阅读:这些是代码中的getter方法。由于您永远不应该在类之外公开内部变量,因此您提供了getter,以便其他代码可以获得有关对象状态的信息。这也是在读取各种数据库条目的字段
- 更新:这些是setter方法,对于其他代码也需要修改对象或数据库条目的实例,它们是getter的补充
- destroy:这指的是对象的析构函数,这段代码可以释放任何分配的资源,并确保对象可以被干净地处理,或者从数据库中删除记录
面向对象编程和数据库之间的联系是数据库条目在相当基本的意义上是对象的基本思想。数据库中的每个条目都有不同的字段,这些字段直接对应于面向对象语言中对象的字段。
来自维基百科
Operation SQL HTTP
Create INSERT PUT / POST
Read (Retrieve) SELECT GET
Update (Modify) UPDATE PUT / PATCH
Delete (Destroy) DELETE DELETE
你在面向对象环境中听说它,因为与你相处的这些人使用的是像Java这样的面向对象语言。
作为证据,您可以在这里的中找到Haskell中的CRUD实现
您不应该使用CRUD方法构建类。
您应该使用表示建模域上下文中表示的对象的行为的方法来构建一个类。用CRUD这样的通用方法构建类将是OOP设计的味道。
例如,这是错误的(一般错误)
class Person(object):
def __init__(name, age, location)
self.name = name
self.age = age
self.location = location
def get_name(self):
return self.name
def update_name(self, new_name):
self.name = new_name
def delete_name(self):
self.name = None
这些方法与人员的行为无关。它将Person变成了一个愚蠢的数据对象,这与面向对象设计试图做的相反
如果您的person对象必须与数据库进行对话才能持久化,则应在公共接口中隐藏此功能。一个更好的选择是,首先不要将对象绑定到数据库,在域中使用Plain Old Objects,然后使用其他方法写入数据库。
大多数时候,我会对存储在数据库中的数据使用crud。我将亲自编写几个存储过程来执行这些功能。
CRUD也是声明变量的基本操作。例如,在C#中,您可以声明一个变量List<Of T>
,然后在将其上载到数据库之前对其执行CRUD操作。
CRUD(创建、读取、更新、删除)独立于编程范式;它与常见的用户操作有关。
- Create操作对应于SQL INSERT语句和HTTP POST方法
- Read操作对应于SQL SELECT语句和HTTP GET方法
- Update操作对应于一个SQL Update语句和一个HTTP PUT/PATCH方法
- Delete操作对应于SQL Delete语句和HTTP Delete方法
我的博客文章对有了深刻的理解