Скажем, у меня есть три коллекции в Mongo: flavor
, color
и cupcake
. Каждая коллекция имеет свой собственный _id
(очевидно), а коллекция cupcake
ссылается на _id
в flavor
и cupcake
, например:
{
"_id": ObjectId("123"),
"flavorId": ObjectId("234"),
"colorId": ObjectId("345"),
"moreData": {}
}
Это, конечно, игрушечный пример, и в этих сборниках есть еще всякое. Это не важно для этого вопроса, за исключением того, что это moreData
, который я действительно ищу, когда запрашиваю.
Я хочу иметь возможность искать cupcake
объектов по flavorId
и по colorId
(и они должным образом индексируются для таких поисков). Однако оба поля ObjectId
, и я хочу, чтобы кто-то случайно не искал colorId
с flavorId
. Как спроектировать объект и класс репозитория таким образом, чтобы colorId
и flavorId
были разными типами, чтобы компилятор не позволял менять их местами, но при этом сохранял оба идентификатора как ObjectId?
Моей первой мыслью было расширить ObjectId и передать расширенный объект, но ObjectId — это struct
, который не может быть расширен.
cupcake
объекты кflavorId
. Таким образом, вы вызываете cupcakeRepository.Find(ObjectId flavorId), потому что IntelliSense очень любезно предложил это, и вы не прочитали имя аргумента. Эй, он компилируется! Даже ваши модульные тесты проходят успешно, потому что вы смоделировали метод в соответствии с тем, что вы думали, он делал. - person meustrus   schedule 05.07.2016cupcakeRepository.Find(ObjectId colorId)
. Я на самом деле забыл, какой из них я пытался использовать между вводом этих двух предложений. Видите ли, это не просто о каком-то другом разработчике, это чтобы защитить меня от самого себя. - person meustrus   schedule 05.07.2016