0

我在我的解决方案中使用 FluentNHibernate。fluentnhibernate 文档中推荐的文件夹结构如下:

实体文件夹,在该文件夹下我们有业务模型的 POCO 类。Mappings 文件夹,在该文件夹下我们有数据模型的映射。

我假设这两个文件夹将进入一个名为“BusinessModel”的业务层项目?见下文:

BuessinessModel
    |_ Entities
          |- Student.cs
          |- Course.cs
          |- Faculty.cs
    |_ Mappings
          |- Mappings.cs

也许创建另一个名为“DataAccess”的项目,它引用数据访问层的 BusinessModel 项目来执行 CRUD?

最佳做法是什么?有建筑师吗?谢谢。


AK:我在n 层架构 - BLL、DAL 和接口上阅读了您的帖子。什么是最佳实践?.

让我引用你的

以“人”为例:考虑与一个人相关的不同数据操作(获取单个人的所有数据,多个人的浅层数据集合,CRUD 操作,搜索等) - 然后设计接口逻辑分组。

我试图理解这一点。所以,你是说

  1. 在 BLL 项目中,我们有这个 Person 类。

  2. 同样在 BLL 项目中,我们有一个接口,它声明了 Person 对象所需的所有数据操作方法。

  3. 然后在 DAL 项目中,我们有我们在 BLL 中定义的接口的具体实现。

    这听起来对你吗?谢谢。

4

2 回答 2

1

虽然盲目地将相同的架构应用于每个解决方案/项目是很危险的;我的标准/默认方法是这样的:

高水平

  • 我们的目标是 3 层,我们假设它们是:UI、BL(业务逻辑)、DA(数据访问)。
  • 这将(可能)由以下 4 个组件的逻辑块(想想命名空间)组成:Common、UI、BL、DA。请记住,这 4 个块中的每一个都可能有多个代码级项目。
  • Common 是我们将粘贴其他 3 个需要共享的东西的地方 - 例如 POCO。

您的具体情况

  • 在 Common 中制作 BusinessModel(可能作为一个独立的项目)。
  • 我猜映射依赖于物理数据源,因此应该进入具体的 DA 实现。

其他注意事项

  • 最佳/常见做法是松散耦合我们的主要块(尤其是 BL 和 DA);通常使用依赖注入。
  • 这将通过定义接口来实现,这些接口将/可以使用 POCO 或您的 BusinessModel 实体 - 来自 Common。
于 2011-09-14T01:22:28.820 回答
1

您需要将具体的数据访问与业务层分开,最好创建一个具有实体(域模型)和存储库接口的业务层。

然后创建数据访问的具体实现,其中包括使用 fluentnhibernate 进行数据访问的映射和具体存储库。

业务 |_ 实体 |- Student.cs |- Course.cs |- Faculty.cs |_ RepositoryInterfaces |- IStudentRepository.cs |- ICourseRepository.cs

DAL(具体 - 使用 FluentNHibernate)|_ 映射 |- Mappings.cs |_ 存储库 |- StudentRepository.cs |- CourseRepository.cs

于 2011-09-14T09:54:22.977 回答