2016-08-15 109 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是多余的,但命名标准更多代码可读性。