Mongoには3つのコレクションがあります:flavor
、color
、およびcupcake
です。各コレクションは、独自の_id
(明らかに)持っているとcupcake
コレクションはそうのように、flavor
とcupcake
で_id
秒を参照していますC#で型安全なMongoオブジェクトIDを取得するには?
{
"_id": ObjectId("123"),
"flavorId": ObjectId("234"),
"colorId": ObjectId("345"),
"moreData": {}
}
は、これは当然のことながら、おもちゃの一例であり、これらのコレクションに多くのものがあります。それはこの質問にとって重要ではありませんが、私が照会するときに実際に探しているのはmoreData
です。
cupcake
オブジェクトをflavorId
とcolorId
で検索できます(これらの検索には適切なインデックスが付けられています)。しかし、両方のフィールドがObjectId
であるので、私は誰かが偶然colorId
をflavorId
と探してしまうのを避けたいと思います。 colorId
とflavorId
が異なるタイプになるようにオブジェクトとリポジトリクラスを設計するにはどうすればいいですか?コンパイラはそれらを交換することはできませんが、両方のIDをObjectIdとして保存しますか?
私の最初の考えは、ObjectIdを拡張して拡張オブジェクトを渡すことでしたが、ObjectIdは拡張できないstruct
です。
これは少し冗長なようですか?*誰かが間違って色味を探しているのを避けたいのです* *。誰かがバグを導入することを許可することはできません。 – Liam
この特定のバグを導入するのは簡単かもしれません。リポジトリオブジェクトを持っていて、 "すべての' cupcake'オブジェクトを 'flavorId'で取得します。したがって、IntelliSenseが非常に有益に示唆し、引数名を読まなかったため、cupcakeRepository.Find(ObjectId flavorId)を呼び出します。ねえ、それはコンパイル!あなたが思ったことに従ってメソッドを嘲笑したので、あなたの単体テストも合格します。 – meustrus
または 'cupcakeRepository.Find(ObjectId colorId)'です。私は実際にそれらの2つの文章を入力する間にどちらを使用しようとしているのか忘れていました。これは他の開発者だけではなく、自分自身から私を守るためです。 – meustrus