次の 2 つの db テーブルを検討してください
ユーザー
UserID PrimaryKey 名 姓
安全
SecurityID PrimaryKey UserID ForeignKey パーミッション
すべてのデータベース テーブルには、作成、読み取り、更新、削除操作 (CRUD) があります。
CRUD 操作は複数の場所に存在する可能性があります
<cfquery>
タグの内側
- ストアド プロシージャの内部
- その他
問題は、すべての CRUD 操作が独自の方法でまとめられていることです。User オブジェクト ( ) の作成を検討してくださいuser.cfc
。
<cfcomponent>
<cffunction name="create"></cffunction>
<cffunction name="read"></cffunction>
<cffunction name="update"></cffunction>
<cffunction name="delete"></cffunction>
</cfcomponent>
セキュリティはユーザー管理の一部なので、オブジェクトは db テーブルと 1 対 1 で一致しますか? ORM のような一部の環境では答えはイエスですが、そうでない環境もあります。
セキュリティがユーザー管理の一部であると考える場合、次のようになりますuser.cfc
。
<cfcomponent>
<cffunction name="create"></cffunction>
<cffunction name="read" hint="Read will also read security info"></cffunction>
<cffunction name="update" hint="Perhaps this can update security too"></cffunction>
<cffunction name="delete" hint="Delete will also delete security info"></cffunction>
<cffunction name="create_security"></cffunction>
<cffunction name="read_secrity" hint="This may not even be needed"></cffunction>
<cffunction name="update_security"></cffunction>
<cffunction name="delete_security" hint="This may not even be needed"></cffunction>
</cfcomponent>
一日の終わりには、必要なオブジェクト ( *.cfc
) がテーブルよりもはるかに少ないことに気付くかもしれません。
OK、これであなたはそれuser.cfc
で何をしますか? さまざまな方法でアプリの残りの部分にアタッチできます
- application.User = 新しいユーザー();
- session.User = 新しいユーザー();
- request.User = 新しいユーザー();
これらのそれぞれは、次から非常にです。どちらが適切かを判断する前に、メンバー データと、それをどのくらいの期間使用するかを検討する必要があります。
<cfcomponent>
<cfset this.userid = ""><!--- This always points to the user I want to interact with --->
<cffunction name="create"></cffunction>
<cffunction name="read"></cffunction>
<cffunction name="update"></cffunction>
<cffunction name="delete"></cffunction>
</cfcomponent>
CRUD 操作はUserID
、すべての操作に対して同じ操作を行う可能性があります。レコードを更新した後、頻繁にそれを読むことに気付くかもしれません。どちらとUserID
対話しているかを常に述べるのではなく、一度設定して、すべての機能が同じ機能を使用するようにしたい場合があります。
OK、では、それらを使用する場所に戻りましょう
アプリケーション.ユーザー
User
システム全体で1 つのオブジェクトのみが存在します。サイトにリクエストが来ると作成されます。このオブジェクトは、リクエストごとに共有されます。ここにオブジェクトをアタッチするuser
と、すべてのリクエストが同じユーザーを参照することになります。
session.UserUser
外の世界では、特定のエンドユーザーに対して
1 つのオブジェクトが存在します。他のすべてのエンドユーザーから分離されます。user
これは、各エンド ユーザーが自分のサイトを見ていて、サイトをクリックしても同じサイトを見ていることを示唆しています。user
request.Userリクエストごとに 1
つのUser
オブジェクトが存在します。特定のリクエストに対してのみ存在し、その後破棄されます。これは、このリクエストでは特定のものを見ることは意味があることを示唆していUser
ますが、次のものはまったく異なるか、ユーザーについてでさえない可能性があります。
~~~~~~~~~~~~~~~
最終的には、DB インタラクションをバンドルする方法と、これらのバンドルされたアクションを一緒に保持する期間を決定する必要があります。