メソッドと関数のパラメーターとしてのオブジェクトと一意のIDの使用について賛成または反対の客観的な引数はありますか?(および他のオブジェクトのメンバー?)。特に静的型付け言語のコンテキスト(C#/ Java / Scala)
オブジェクト自体の長所:
- よりタイプセーフな呼び出し。IDを使用すると、引数の順序が誤ってしまうリスクがあります。これは、そのクラスのIDのみを格納するクラスごとに「ミニ」クラスを保持することで軽減できます。
- 永続化から一度取得し、再度取得する必要はありません
- (:courtsey - IDと、IDタイプが変更された場合、INTを言う>長い、そして...ミスの可能性が軒並み変更を必要とするhttps://softwareengineering.stackexchange.com/a/284734/145808)
IDを使用するメリット:
- ほとんどの場合、実際のオブジェクトは必要ありません。uniqueidで十分です。そのため、IDがあれば、永続化から取得する時間を節約できます。
これらのテクニックの混合は、私が見る限り、両方の長所と短所の両方を持っています。
これが具体的に定義された問題であることを考えると、「私は思う」または「好き」タイプではなく、客観的な答えがあることを願っています... :-)。
編集:コメンターの提案に関するコンテキスト-唯一の制限は静的に型付けされた言語です。このアプリケーションは汎用アプリケーションですが、特定の使用シナリオに基づいて回答を得ることもできます。
編集:もう少しコンテキスト。書籍管理システムがあるとします。私のモデルは:
Book: { id: Int, isbn: String, donatedBy: Member, borrowedBy: Member }
Member: {id: Int, name: String}
Table- wishlist: { isbn: String, memberId: Int}
Table- borrows: { id: Int, memberId: Int}
Method:
isInWishList( book: Book, member: Member ) vs isInWishList( bookId: Int, memberId: Int)
handleBorrowRequest( memberId: Int, book: Book ){
//the login system doesn't actually get the entire member structure, only the member id. I don't need the full member yet. can run a query to verify that the memberId has less than max allowed books for borrowing.
}
完全なメンバーではなく、IDのみを保持したいのはなぜですか?本に関する情報を入手したとき、だれがその本を寄贈したか、または借りたかについて知る必要はほとんどありません。彼らの完全な情報を取得して、donatedByフィールドとborrowedByフィールドにデータを入力するのは、やり過ぎです。
もちろん、これらは私のポイントにすぎません。私は何かが欠けていると確信しているので、賛成/反対のポイントは何であるか知りたいと思いました。