- 是否要为每个表类创建单独的项目?
不,不要为每个表类创建单独的项目。这太细了。
- 这会创建一个巨大的 .dll 吗?
默认情况下,每个项目都会创建一个单独的 DLL(我相信您可以使用 IL 合并来更改它。)但是,每个命名空间与 DLL 没有直接关系。也就是说,您可以在一个 DLL 中拥有多个命名空间。
我们通常所做的是创建一个 DAL 库。这将是它自己的项目,通常命名为 ProductName.Data 之类的名称,然后在其中我们可能有一个名称空间,例如 ProductName.Data.Models 或 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;
不过,这更多的是个人喜好。
编辑解决方案视图
- 我的解决方案
- MyProj.数据
- 型号
- User.cs
- Account.cs
- Settings.cs
- 存储库
- UserRepository.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,但它是我将数据对象与实际数据库连接分开的方式。