Yöntem / işlev parametreleri olarak nesnelerin benzersiz kimliğe karşı kullanılmasına karşı veya bunlara karşı nesnel argümanlar var mı? (ve diğer nesnelerin üyeleri?). Özellikle statik olarak yazılan diller bağlamında (C # / Java / Scala)
Nesnenin Artıları:
- Daha güvenli aramalar. Kimliklerde argümanların yanlış sıralanması riski vardır. Bu, yalnızca o sınıfın kimliğini depolayan her sınıf için bir 'mini' sınıf tutularak azaltılabilir.
- Kalıcılıktan bir kez alın, tekrar almaya gerek yok
- Kimlik ile, kimlik türü değişirse, int -> long deyin, o zaman hata olasılığına sahip tahtada değişiklik gerektirir .. (courtsey: https://softwareengineering.stackexchange.com/a/284734/145808 )
Kimlik kullanımının artıları:
- Çoğu zaman gerçek nesneye gerek yoktur, sadece uniqueid olurdu, bu yüzden kimliğe sahip olmak onu kalıcı olmaktan kurtarır.
Bu tekniklerin bir karışımı, görebildiğim kadarıyla, hiçbirinin hem hem de artılarının eksileri olurdu.
Bunun somut olarak tanımlanmış bir sorun olduğu düşünüldüğünde, umarım objektif cevaplar vardır ve "sanırım" ya da "Seviyorum" türleri değil ... :-).
EDIT: Bir yorumcunun önerisi bağlamı- Tek kısıtlama statik olarak yazılmış dillerdir. Her ne kadar belirli kullanım senaryolarına dayalı cevaplar almak için mutlu olsa da, uygulama genel amaçlı bir uygulamadır.
EDIT: Biraz daha bağlam. Diyelim ki bir kitap yönetim sistemim var. Modelim:
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.
}
Neden tam üyeyi değil, sadece kimliği tutmak isteyeyim? Kitap hakkında bilgi aldığımda, kitabı kimin bağışladığını veya ödünç aldığını bilmem gerek. DonatedBy ve borrowedBy alanlarını doldurmak için tam bilgi almak bir aşırı iş.
Tabii ki, bunlar sadece benim düşüncelerim. Eminim bir şeyleri kaçırıyorum, bu yüzden lehte / aleyhte olan noktaların ne olduğunu bilmek istedim.