- 我会为每个表类创建单独的项目吗?
不,不要为每个表类创建单独的项目。这太细了。
- 这会创建一个巨大的 .dll 吗?默认情况下,每个项目都会创建一个单独的 DLL(我相信您可以使用 IL 合并来更改它。)但是,每个命名空间与 DLL 没有直接关系。也就是说,您可以在单个 DLL 中拥有多个命名空间。
我们通常所做的是创建一个 DAL 库。这将是它自己的项目,通常命名为ProductName.Data
Then 在其中我们可能有一个类似ProductName.Data.Models
or的命名空间ProductName.Data.Repositories
。
命名空间主要用于帮助您组织代码。他们还帮助编译器。例如,如果您有一个名为 的数据库类Users
,并且它位于 中,那么如果它位于单独的命名空间中XYZ.Data
,您仍然可以拥有一个名为的视图模型,例如.Users
XYZ.ViewModels
我们所做的另一件事是在同一产品的 DLL 中保持根名称空间相同。所以我们最近有我们的数据库在XYZ.Data
. 然后我们将应用程序特定的逻辑放在一个单独的 DLL 中并命名它。XYZ.AppLogic
我们在命名空间中也有视图模型XYZ.ViewModels
。
我不相信有任何硬性/快速规则来限制您拥有的命名空间的数量。默认情况下,Studio 会尝试为项目中的每个文件夹创建一个新的命名空间。也就是说,我经常尝试避免命名空间过载,因为我不想在我的文件顶部看到这样的内容:
using XYZ.Data.Models.Accounts;
using XYZ.Data.Models.Users;
using XYZ.AppLogic.Authentication;
using XYZ.AppLogic.Users;
using XYZ.AppLogic.Settings;
using XYZ.ViewModels.UserPreferences;
但是,这更多的是个人喜好。
编辑解决方案视图
- 我的解决方案
- 我的项目数据
- 存储库
- 用户存储库.cs
- AccountRepository.cs
User.cs 是我定义表的 POCO(Plain Ol' CLR Object)。
Repository 文件夹包含特定于我的 ORM(我正在使用 PetaPoco)的东西,它让我可以实际访问我的用户数据。
例如,我的 UserRepository 可能有一个方法
public User GetById(int id)
{
var db = new Database(<myConnectionStringName>);
return db.SingleOrDefault<User>(id);
}
该语法特定于 PetaPoco,但它是我将数据对象与实际数据库连接分开的方式。