1

我想知道不断重用名称空间名称是否适用于 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。

4

3 回答 3

3

有关命名约定和规则,请参阅MSDN 的命名空间名称框架指南

话虽如此,这不会涵盖这个特定问题:

所以我想知道是否可以将项目的 sql 版本添加到 JoltEnvironment.Game.Items.Sql 之类的东西中,还是应该将其保留在 JoltEnvironment.Game.Items 中?

两者都可以,最合适的一个取决于您的具体需求。

如果游戏项目将在整个游戏中普遍使用,但数据访问只会被一小部分使用,我可能会将其拆分为自己的命名空间(尽管可能不称为 Sql - 我可能会使用 Data 或 DataAccess ,因为您最终可能还想在那里添加非 SQL 相关信息)。

但是,如果您总是将这些类与 Items 命名空间中的类一起使用,我可能会将它们留在一个命名空间中。

于 2010-01-20T00:28:42.683 回答
1

您在询问命名约定,答案是,这完全取决于您。

如果有多个实现,我允许在命名空间中使用额外的层次结构。在您的情况下,如果有其他一些不使用 Sql 进行查询的存储机制,则 .Sql 是合适的。也许是 XML/Xpath。但是如果你没有那个,那么似乎 .Sql 层的命名就没有必要了。

不过,在那一点上,我想知道为什么您会在之前的级别使用 {games,users} 。感觉命名空间更自然

JoltEnvironment.Game.Storage

..而完全限定的类型名称将是

JoltEnvironment.Game.Storage.SqlItem JoltEnvironment.Game.Storage.SqlUser

等等。

如果一个命名空间,比如 JoltEnvironment.Game.Items,只有一两个类,它似乎应该被折叠到一个更高级别的命名空间中。

于 2010-01-20T00:28:51.950 回答
1

你叫什么 SQL 版本?SQL Server 的版本?还是数据库连接的版本?如果是后者,我会做类似的事情:

JoltEnvironment.Game.Items.DataAccess.SQLServer
JoltEnvironment.Game.Items.DataAccess.MySQL 
JoltEnvironment.Game.Items.DataAccess.Oracle

ETC...

如果是前者,我认为 ADO.NET 无论如何都会根据提供者为您解决这个问题,因此同一名称空间下的所有内容都可以。

于 2010-01-20T00:39:13.660 回答