簡體   English   中英

.NET,分層架構和MongoDB - 什么用作ID?

[英].NET, Layered Architecture & MongoDB - What to use as ID?

我正在開發一個.NET Web服務,同時嘗試維護一個分層的體系結構,將我的模型保存在一個項目中,將數據庫訪問(DAL)保存在另一個項目中。 這背后的想法是,如果我必須更改數據庫技術,只需創建一個不同的DAL,而應用程序的其余部分保持不變。

在我正在開發的數據訪問層中,我使用的是Mongo DB C#Driver

我見過:

  • 名為“ID”的屬性將由C#驅動程序映射為數據庫的“_id”( 約定優於配置 );

  • Mong +DB中的Int +自動增量不是一個好主意 ;

  • 在MongoDB中使用Guid作為ID 也不是一個好主意 ;

  • MongoDB中存儲的文檔ID的推薦數據類型是ObjectID C#驅動程序提供了一個表示它的類;

    • 但是,如果我在我的模型中使用這種數據類型(來自MongoDB.Bson ),那么它們將依賴於MongoDB C#驅動程序而我不希望這樣:我希望我的模型與數據庫無關; 只有我的DAL可以依賴於我使用的任何數據訪問技術。

那么我應該將哪種數據類型用於我的POCO ID,以便在數據庫中保證唯一性? Guid的字符串表示在性能方面是否可怕?

歡迎您的反饋。

好問題。

根據經驗,我可以說你是對的:GUID和自動增量都不是最好的主意(GUID比自動增量好很多),但不僅僅是因為你鏈接的SO問題中提到的原因但是,主要是因為您需要了解單調與非單調鍵的含義。

使用ObjectIds ,我看到三個選項:

  • 域模型和DAL之間的映射。 在域模型中,您可以使用objectid的字符串表示。 這有點煩人,但它迫使你分離關注點。

  • 使用您自己的數據類型並實現類型轉換器/ mongodb序列化程序。 我沒試過,但我不明白為什么這不起作用。

  • 接受MongoDB依賴項。 畢竟,如果你真的換掉了你的數據庫,那將是一項艱巨的任務。 不同的數據庫具有非常不同的特征,並且需要非常不同的數 在一分鍾內整個“交換數據庫”是虛假的恕我直言,它從來沒有那么容易,數據庫是一個比任何人都想承認的更漏洞的抽象。 試圖保持獨立是PITA。 無論如何,對ObjectId這個詞進行搜索和破壞將不到其他工作的1%。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM