C#约定/最佳实践

时间:2010-01-20 00:22:14

标签: c# class-design conventions

我想知道不断重用命名空间名称对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。

3 个答案:

答案 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无论如何都会根据提供商处理这个问题,所以同一命名空间下的所有东西都可以。