如何处理模型 CRUD 异常
how to handle model crud exceptions
不久前,我启动了一个 Web 应用程序,前端为 JavaScript 和 HTML,后端为 PHP。其中,我将 backbone.js 添加到我的前端框架中。
我了解到在客户端服务器通信中有 4 种不同类型的操作:创建、更新、删除和读取。
阅读:你发送某个模型的唯一id,你就得到了记录。
创建:您发送记录数据。有时id也是在客户端创建的,有时是在后端创建的。
更新:您将具有更改值的模型数据发送到后端。
删除:您发送模型的 ID,它将被删除。
但是,在实践中,您了解到存在不符合基本模式的特殊情况。
例如:登录、认证。
在第一个web应用中我想把这种情况挤进基本操作中。所以我使用了以下方法:
在我的身份验证中,我需要一些数据,某个用户帐户的一些属性。所以这是我的模型。我提供了 id 并取回了用户模型。
但是这种情况下,这种做法并不干净。
您不仅提供密钥(用户名),还发送用户名和密码。此外,您不会获得用户数据作为对此请求的答复,而是获得状态(成功/失败)。
现在我开始另一个应用程序。这次我想以一种干净的方式完成我。
你能帮我试试吗?
当我想到这种干净的方法时,我有以下考虑:
在这个登录案例中,我想用一个传输发送 2 个模型,一个请求:
第一个模型是认证模型。它没有 "id",因为 class 只有一个实例。它具有 "user name"、"password" 和 "authentication status" 属性。在答案中后端填写身份验证状态。
第二个模型是用户模型。我提供用户名 (id) 并从服务器取回用户数据。
您如何看待这些最初的想法,以便为我的登录案例获得一个清晰的结构。第一种方法更好吗?
你的方法是什么?
首字母缩略词 CRUD 是为了描述基本数据库操作而发明的。你会发现它通常并不真正适用于应用程序级逻辑。
例如,要对用户进行身份验证,您需要创建一个服务器命令来接受来自客户端的凭据,然后服务器使用数据库操作(可能是读取操作)来检查这些凭据,如果有效,则提供具有某种可用于未来操作的登录令牌的客户端。用户登录本身是一个比纯数据库操作更高级的功能,而且您可能已经发现自己,它不适合 CRUD 模型。
因此,如果您尝试将应用程序级函数建模为纯 CRUD 操作,我认为您将遇到很大的困难。应用程序使用数据库操作来完成它们的工作,但是有许多应用程序的许多操作并不直接映射到数据库操作。事实上,甚至可能有一些应用程序级功能甚至根本不涉及数据库,还有许多其他功能使用数据库操作生成结果,但不直接映射到数据库操作。
您应该将服务器持久数据的接口考虑为与您的应用程序级别不同的模型 API。有时会存在直接关联(例如设计用于获取数据的应用程序级函数),有时根本不会有太多关联(例如登录或某种计算函数)。
不久前,我启动了一个 Web 应用程序,前端为 JavaScript 和 HTML,后端为 PHP。其中,我将 backbone.js 添加到我的前端框架中。
我了解到在客户端服务器通信中有 4 种不同类型的操作:创建、更新、删除和读取。
阅读:你发送某个模型的唯一id,你就得到了记录。
创建:您发送记录数据。有时id也是在客户端创建的,有时是在后端创建的。
更新:您将具有更改值的模型数据发送到后端。
删除:您发送模型的 ID,它将被删除。
但是,在实践中,您了解到存在不符合基本模式的特殊情况。
例如:登录、认证。
在第一个web应用中我想把这种情况挤进基本操作中。所以我使用了以下方法:
在我的身份验证中,我需要一些数据,某个用户帐户的一些属性。所以这是我的模型。我提供了 id 并取回了用户模型。
但是这种情况下,这种做法并不干净。
您不仅提供密钥(用户名),还发送用户名和密码。此外,您不会获得用户数据作为对此请求的答复,而是获得状态(成功/失败)。
现在我开始另一个应用程序。这次我想以一种干净的方式完成我。
你能帮我试试吗?
当我想到这种干净的方法时,我有以下考虑:
在这个登录案例中,我想用一个传输发送 2 个模型,一个请求:
第一个模型是认证模型。它没有 "id",因为 class 只有一个实例。它具有 "user name"、"password" 和 "authentication status" 属性。在答案中后端填写身份验证状态。
第二个模型是用户模型。我提供用户名 (id) 并从服务器取回用户数据。
您如何看待这些最初的想法,以便为我的登录案例获得一个清晰的结构。第一种方法更好吗?
你的方法是什么?
首字母缩略词 CRUD 是为了描述基本数据库操作而发明的。你会发现它通常并不真正适用于应用程序级逻辑。
例如,要对用户进行身份验证,您需要创建一个服务器命令来接受来自客户端的凭据,然后服务器使用数据库操作(可能是读取操作)来检查这些凭据,如果有效,则提供具有某种可用于未来操作的登录令牌的客户端。用户登录本身是一个比纯数据库操作更高级的功能,而且您可能已经发现自己,它不适合 CRUD 模型。
因此,如果您尝试将应用程序级函数建模为纯 CRUD 操作,我认为您将遇到很大的困难。应用程序使用数据库操作来完成它们的工作,但是有许多应用程序的许多操作并不直接映射到数据库操作。事实上,甚至可能有一些应用程序级功能甚至根本不涉及数据库,还有许多其他功能使用数据库操作生成结果,但不直接映射到数据库操作。
您应该将服务器持久数据的接口考虑为与您的应用程序级别不同的模型 API。有时会存在直接关联(例如设计用于获取数据的应用程序级函数),有时根本不会有太多关联(例如登录或某种计算函数)。