我想知道不断重用命名空间名称对c#约定/最佳实践有效。
我用Java开发大部分程序,我会有一个实现包,例如:
com.ajravindiran.jolt.game.items.sql
com.ajravindiran.jolt.game.users.sql
com.ajravindiran.jolt.events.impl
com.ajravindiran.jolt.tasks.impl
让我们谈谈com.ajravindiran.jolt.game.items.sql
,这是我最接近的情况。我当前写了一个将MySQL Connection / Net包装成OODBMS的库。
所以我有一个名为ISqlDataObject
的界面,其中包含以下成员:
bool Insert(SqlDatabaseClient client);
bool Delete(SqlDatabaseClient client);
bool Update(SqlDatabaseClient client);
bool Load(SqlDatabaseClient client);
并像这样使用:
public class SqlItem : Item, ISqlDataObject
{
public bool Load(SqlDatabaseClient client)
{
client.AddParameter("id", this.Id);
DataRow row = client.ReadDataRow("SELECT * FROM character_items WHERE item_uid = @id;");
this.Examine = (string)row["examine_quote"];
...
}
...
}
称为:
SqlItem item = new SqlItem(int itemid);
GameEngine.Database.Load(item);
Console.WriteLine(item.Examine);
所以我想知道是否可以将项目的sql版本添加到JoltEnvironment.Game.Items.Sql
之类的内容中,或者我应该将它保留在JoltEnvironment.Game.Items
?
非常感谢AJ Ravindiran。
答案 0 :(得分:3)
有关命名约定和规则,请参阅MSDN's Framework Guidelines on Names of Namespaces。
话虽如此,这不会涵盖这个具体问题:
所以我想知道是否可以将这些项目的sql版本添加到JoltEnvironment.Game.Items.Sql之类的内容中,还是应该将它保存在JoltEnvironment.Game.Items中?
可以做任何一种,最合适的一种取决于你的具体需求。
如果游戏项目将在整个游戏中普遍使用,但数据访问只会被一小部分使用,我可能会将其拆分为自己的命名空间(尽管可能不称为Sql - 我可能会使用Data或DataAccess,因为您最终也可能希望在那里添加非SQL相关信息)。
但是,如果你总是将这些类与Items命名空间中的类一起使用,我可能会把它们放在一个命名空间中。
答案 1 :(得分:1)
你问的是命名约定,答案是,这完全取决于你。
如果有多个实现,我允许在命名空间中使用额外的层次结构。在您的情况下,如果存在其他一些不使用Sql进行查询的存储机制,则.Sql是合适的。也许它是XML / Xpath。但是如果你没有那个,那么似乎没有必要使用.Sql层命名。
但是,在那个问题上,我想知道你为什么要在之前的级别使用{游戏,用户}。感觉像命名空间更自然
JoltEnvironment.Game.Storage
..完全限定类型的名称将是
JoltEnvironment.Game.Storage.SqlItem JoltEnvironment.Game.Storage.SqlUser
等等。
如果命名空间(如JoltEnvironment.Game.Items)只有一个或两个类,则它似乎应该折叠为更高级别的命名空间。
答案 2 :(得分:1)
你在叫什么SQL版本? SQL Server的版本?或数据库连接的版本?如果是后者,我会做类似的事情:
JoltEnvironment.Game.Items.DataAccess.SQLServer
JoltEnvironment.Game.Items.DataAccess.MySQL
JoltEnvironment.Game.Items.DataAccess.Oracle
等...
如果是前者,我认为ADO.NET无论如何都会根据提供商处理这个问题,所以同一命名空间下的所有东西都可以。