Есть ли объективные аргументы за или против использования объектов против уникального идентификатора в качестве параметров метода / функции? (а члены других объектов?). Особенно в контексте статически типизированных языков (C # / Java / Scala)
Плюсы самого объекта:
- Более безопасные звонки. С идентификаторами существует риск неправильного упорядочения аргументов. Этого можно избежать, сохранив мини-класс для каждого класса, в котором хранится только идентификатор этого класса.
- Получить один раз от настойчивости, нет необходимости получать снова
- С идентификатором ID, если тип идентификатора изменится, скажем, int -> long, потребуется изменение по всем направлениям с возможными ошибками .. (суд: https://softwareengineering.stackexchange.com/a/284734/145808 )
Плюсы использования ID:
- Большую часть времени нет необходимости в реальном объекте, просто будет uniqueid, поэтому наличие идентификатора экономит время на его получение от постоянства.
Насколько я могу судить, смесь этих техник имела бы только минусы обоих и плюсы ни того, ни другого.
Учитывая, что это конкретно определенная проблема, я надеюсь, что есть объективные ответы, а не - «я думаю» или «мне нравятся» типы ... :-).
РЕДАКТИРОВАТЬ: Контекст по предложению комментатора-Единственное ограничение является статически типизированных языков. Приложение является приложением общего назначения, хотя с удовольствием получит ответы и на основе конкретных сценариев использования.
РЕДАКТИРОВАТЬ: немного больше контекста. Скажем, у меня есть система управления книгами. Моя модель:
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.
}
Почему я хочу оставить только идентификатор, а не полноправного члена? Скажем, когда я получаю информацию о книге, мне редко нужно знать, кто ее пожертвовал или одолжил. Получение их полной информации для заполнения полей donatedBy и loanedBy является излишним.
Конечно, это только мои очки. Я уверен, что я скучаю по вещам, поэтому хотел знать, какие моменты в пользу / против.