2016-08-15 156 views
0

對不起,我沒有更好的標題。C#同名類型名稱約定

我有一個難以描述的命名約定問題。

我有以下的lib項目:

Common.CQRS 
-- Interfaces 
---- IQuery 
Common.CQRS.EntityFramework 
-- Interfaces 
---- IQuery <--- Question 
Common.CQRS.Mongo 
-- Interfaces 
---- IQuery <--- Question 

顯然IQUERY到處做同樣的事情,只是有關(在這種情況下)的數據存儲系統。 「Common.CQRS」的IQuery是基礎,其他IQuery必須繼承此IQuery。 在過去,我會從「Common.CQRS」IQueryBase命名IQuery,但我讀到應該避免這種情況。 我可以從「Common.CQRS.EntityFramework」IEntityFrameworkQuery和Mongo IMongoQuery等名稱IQuery,應該嗎? 由於命名空間,它在某種程度上是多餘的,不是嗎?

感謝您的意見。

回答

0

我認爲你建議改變它是好的。我在你工作的一個項目中使用你的現有約定,而在另一個項目中我有你提出的約定。它使代碼更好看。不得不在你的代碼中指定EntityFramework.Interfaces.IQueryMongo.Interfaces.IQuery難看。 IEntityFrameworkQueryIMongoQuery更好。

0

如果你在一個團隊工作,整個團隊應該同意並堅持一個約定。

如果您是個人開發人員/獨立決策者,那麼這個問題在這裏是有意義的,因爲很多人,他們遵循的許多慣例和實踐。

IQueryBase - 只有在您認爲不會實現僅實現此接口的實現(class)時,您才能擁有此或最好爲IBaseQuery。否則最好保留它作爲IQuery

namespace.IQuery - 我同意@Brendan EntityFramework.Interfaces.IQuery等看起來很醜。但是,您可以使用名稱空間別名縮短它。

using efi = Common.CQRS.EntityFramework.Interfaces; 
using mi = Common.CQRS.Mongo.Interfaces; 

efi.IQuery 
mi.IQuery 

這是較短,但不可讀取,什麼efimi立場。我剛纔提到它可以縮短引用。如果您不喜歡完全限定的名稱或名稱空間別名,那麼您將遇到模糊性錯誤。

ISpecializedQuery - 所以這是唯一的選擇,更好的。同意EntityFramework.Interfaces.IEntityFrameworkQuery是多餘的,但命名標準更多代碼可讀性。